【问题标题】:EventBus event between two fragments not fired两个片段之间的 EventBus 事件未触发
【发布时间】:2016-06-21 14:35:10
【问题描述】:

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

    (...)
}

【问题讨论】:

  • 两个片段是否同时恢复?确保父片段没有暂停,这将取消它从总线上的订阅。

标签: android android-fragments callback event-bus


【解决方案1】:

Fragment 生命周期比 Activity 生命周期复杂得多。我猜你的 onResume() 并没有像你想象的那样被调用。我建议将您的注册和取消注册移至 onAttach() 和 onDetach() 方法。

【讨论】:

    【解决方案2】:

    我使用@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) {
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-02
      • 1970-01-01
      • 2015-03-13
      相关资源
      最近更新 更多