EventBusはFragment間で値を伝達するために使用されます(EventBus postは1回のイベントで複数回受信します)

1328 ワード

1つのActivityで複数のfragmentで使用されるeventbusは、送信されたイベントを受信し、1つの場所でpostが1回、複数のfragmentが受信し、複数回受信する場合をもたらします.
解決策1:登録時に登録済みであれば次のコードを登録しないと判断する
    if (!EventBus.getDefault().isRegistered(this)) {
         EventBus.getDefault().register(this);
   }
この方法でonDestroyView()を破棄します.
@Override
public void onDestroyView() {
    super.onDestroyView();
    if (EventBus.getDefault().isRegistered(this)) {
        EventBus.getDefault().unregister(this);
    }
}

この方法は私にはできません.私のプロジェクトはActivityの中で複数のfragmentがジャンプしていて、直接破棄していません.
mActivity.switchContent(InOutPortDetailShowFragment.this, new AddNewInOutPortFragment());

ソリューション2:各fragmentはpostを使用して1回に2回受信する場合があり、後のfragmentでのみインタフェースコールバックを使用して、この問題を完璧に解決することができます(1つのActivityとその中のfragmentでは、できるだけ1回のEventBusだけを使用してイベントを受信し、複数の受信が発生しないようにし、残りはインタフェースを使用してデータ転送します)
public interface OnItemClickListener {

   void  onItemClick(T t);
}

 
@Override
public void onItemClick(Object o) {
    if (o instanceof NoDataBean1) {
        NoDataBean1 noDataBean1 = (NoDataBean1) o;
        if (noDataBean1.getKey().equals("    ")) {
         
            mActivity.switchContent(InOutPortDetailShowFragment.this, new AddNewInOutPortFragment());
        }
    }
}