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()を破棄します.
この方法は私にはできません.私のプロジェクトはActivityの中で複数のfragmentがジャンプしていて、直接破棄していません.
ソリューション2:各fragmentはpostを使用して1回に2回受信する場合があり、後のfragmentでのみインタフェースコールバックを使用して、この問題を完璧に解決することができます(1つのActivityとその中のfragmentでは、できるだけ1回のEventBusだけを使用してイベントを受信し、複数の受信が発生しないようにし、残りはインタフェースを使用してデータ転送します)
解決策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());
}
}
}