问题:我正在使用EventBus
greenrobot来传递一些事件。
遗憾的是,对于我在两个fragments
之间传递数据的情况,它不适用于我。所以事件不会被解雇。
问题:我是否误解了这个概念?或者我的代码中有错误吗?
注意:发送事件时存在两个片段。一个fragment
是父项,另一个是孩子显示详细信息。
详细信息片段:
public class DetailFragment extends Fragment {
(...)
refreshButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
EventBus.getDefault().post(new IntentRefresh());
}
});
(...)
}
EventBus类:
public class IntentRefresh {
public IntentRefresh (){}
public void refreshParent() {
}
}
父片段:
public class ParentFragment extends Fragment {
(...)
@Override
public void onPause() {
super.onPause();
EventBus.getDefault().unregister(this);
}
@Override
public void onResume() {
super.onResume();
EventBus.getDefault().register(this);
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void updateList(IntentRefresh intentRefresh) {
Toast.makeText(getActivity(), "LUEEEEPT", Toast.LENGTH_SHORT).show();
}
(...)
}
答案 0 :(得分:4)
Fragment生命周期比Activity生命周期复杂得多。我猜你的onResume()没有像你想象的那样被调用。我建议将注册和取消注册移动到onAttach()和onDetach()方法。
答案 1 :(得分:0)
我使用了@ CaseyB的回答。它完美地为我工作。如下所示
@Override
public void onAttach(Context context) {
super.onAttach(context);
if (!EventBus.getDefault().isRegistered(this))
EventBus.getDefault().register(this);
}
@Override
public void onDetach() {
super.onDetach();
EventBus.getDefault().unregister(this);
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void onMessageEvent(CallbackModel event) {
}