两个片段之间的EventBus事件未触发

时间:2016-06-21 14:35:10

标签: android android-fragments callback event-bus

问题:我正在使用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();
    }

    (...)
}

2 个答案:

答案 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) {

}