未触发两个片段之间的 EventBus 事件
EventBus event between two fragments not fired
问题: 我正在使用 greenrobot 的 EventBus
来传递一些事件。
不幸的是,对于在两个 fragments
之间传递数据的情况,它对我有用,但事实并非如此。所以事件不会被解雇。
问题:我是不是理解错了这个概念?还是我的代码有错误?
注意:发送事件时两个片段都存在。一个 fragment
是父项,另一个是显示详细信息的子项。
详细片段:
public class DetailFragment extends Fragment {
(...)
refreshButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
EventBus.getDefault().post(new IntentRefresh());
}
});
(...)
}
事件总线class:
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();
}
(...)
}
Fragment 生命周期比 Activity 生命周期复杂很多。我猜你的 onResume() 并没有像你想象的那样被调用。我建议将您的注册和取消注册移动到 onAttach() 和 onDetach() 方法。
我使用@CaseyB 的回答。它对我有用 perfectly.Like
@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) {
}
问题: 我正在使用 greenrobot 的 EventBus
来传递一些事件。
不幸的是,对于在两个 fragments
之间传递数据的情况,它对我有用,但事实并非如此。所以事件不会被解雇。
问题:我是不是理解错了这个概念?还是我的代码有错误?
注意:发送事件时两个片段都存在。一个 fragment
是父项,另一个是显示详细信息的子项。
详细片段:
public class DetailFragment extends Fragment {
(...)
refreshButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
EventBus.getDefault().post(new IntentRefresh());
}
});
(...)
}
事件总线class:
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();
}
(...)
}
Fragment 生命周期比 Activity 生命周期复杂很多。我猜你的 onResume() 并没有像你想象的那样被调用。我建议将您的注册和取消注册移动到 onAttach() 和 onDetach() 方法。
我使用@CaseyB 的回答。它对我有用 perfectly.Like
@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) {
}