1つのアクティビティ(DemoActivity.Java)と2つのフラグメント(FragmentOne.JavaおよびFragmentTwo.Java)を作成しました。
ThisEventBus.getDefault().register(this);
のようにアクティビティにEventBus
を登録しました
アクティビティで1つのSuscriberメソッドを作成しました。
_@Subscriber
public void abc(String str) {
Log.i(TAG,"MainActivity Called !!");
}
_
次に、ボタンをクリックしてFragmentTwo.Javaからイベントを投稿しますEventBus.getDefault().post("");
このシナリオは私にとってはうまくいきます。しかし、FragmentOne.Javaで同じサブスクライバーメソッドを作成すると、機能しません。どうして?
あなたの質問から、問題を引き起こしている2つのことがあるかもしれません:
EventBus
クラスの場合とは異なり、FragmentOne
をDemoActivity
クラスに登録していない可能性があります。EventBus
にFragmentOne
を登録している場合は、FragmentOne
フラグメントクラスが生きていて、FragmentTwo
クラス。編集する
コメントからわかるように、EventBus
をEventBus.getDefault().register(getActivity())
として登録しました。これにより、アクティビティのみが登録されます。 Fragment
を登録するには、EventBus.getDefault().register(this)
メソッドでFragment.onCreate()
を使用します。
フラグメントには Sticky Events を使用します。フラグメントが複数のオフセットをロードするためです。
Eventbusを登録および登録解除します。
_ @Override
public void onStart() {
Log.d(TAG, "Register ");
EventBus.getDefault().register(this);
super.onStart();
}
@Override
public void onStop() {
super.onStop();
Log.d(TAG, "Unregister");
EventBus.getDefault().unregister(this);
}
_
OnChildChange.class post event with
.postSticky()
:
_EventBus.getDefault().postSticky(new OnChildChange(position));
_
_
sticky = true
_でEventBusを購読:
_@Subscribe(sticky = true, threadMode = ThreadMode.MAIN)
public void onCategoryChangeEvent(OnChildChange event){
// get the event and remove drom sticky
OnChildChange stickyEvent = EventBus.getDefault().removeStickyEvent(OnChildChange.class);
if(stickyEvent != null) {
// apply your logic or call methods
}
}
_