如何在 Activity 中使用 EventBus 并在 Android 中使用 Fragment

How to use EventBus in Activity and Fragment on Android

在我的应用程序中,我想使用 EventBus 来调用另一个 activities 中的一些方法。
我想在activityDetailActivity)中点击backButton时,调用fragmentMainFragment).
MainFragment 我有 recyclerView 并用 recyclerView adapter.[=47 打开这个 activity (DetailActivity) =]

我在 DetailActivityMainFragment 中写了下面的代码,但是当点击 backButton 时, 不调用MainFragment.

中的方法

MainFragment 代码:

public void onStart() {
    EventBus.getDefault().register(this);
    super.onStart();
}

@Override
public void onStop() {
    super.onStop();
    EventBus.getDefault().unregister(this);
}

@Subscribe(threadMode = ThreadMode.MAIN)
public void onRefreshAuctions(EventUpdateAuctionsState event){
    Toast.makeText(context, "OK", Toast.LENGTH_SHORT).show();
}

DetailActivity 代码:

@Override
public void onBackPressed() {
    finishWithAnimate();
    EventBus.getDefault().post(new EventUpdateAuctionsState());
}

EventUpdateAuctionsState 代码:

public class EventUpdateAuctionsState {
    public EventUpdateAuctionsState() {
    }
}

为什么不调用MainFragment中的方法?
我该如何解决?

也许您的 Fragment 在触发事件时处于停止状态。尝试在 create/destroy 生命周期中注册、注销。

public void onCreate() {
    super.onCreate();
    EventBus.getDefault().register(this);
}

@Override
public void onDestroy() {
    super.onDestroy();
    EventBus.getDefault().unregister(this);
}

建议

顺便问一下,您为什么仅将 EventBus 用于 backpress 实现。你可以简单地这样做。如果您的片段是 DetailActivity.

的子片段
@Override
public void onBackPressed() {
    finishWithAnimate();
    // get your fragment
    if(fragment!=null) fragment.onRefreshAuctions();
}

如果没有片段实例,可以使用getFragmentManager().findFragmentByTag("tag")