简体   繁体   English

如何在Android的Activity和Fragment中使用EventBus

[英]How to use EventBus in Activity and Fragment on Android

In my application i want use EventBus for call some methods in another activities . 在我的应用程序中,我想使用EventBus在另一个活动中调用某些方法。
I want when click on backButton in activity ( DetailActivity ), call one method in fragment ( MainFragment ). 我想在activityDetailActivity )中单击backButton时,在fragmentMainFragment )中调用一个方法。
in MainFragment i have recyclerView and open this activity ( DetailActivity ) with recyclerView adapter . MainFragment中,我具有recyclerView并使用recyclerView adapter打开此activityDetailActivity )。

I write below codes in DetailActivity and MainFragment but when click on backButton , not call method in MainFragment . 我下面写的DetailActivityMainFragment代码,但点击时backButton ,而不是MainFragment 调用方法

MainFragment codes : 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 codes : 详细活动代码:

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

EventUpdateAuctionsState codes : EventUpdateAuctions状态代码:

public class EventUpdateAuctionsState {
    public EventUpdateAuctionsState() {
    }
}

Why not call method in MainFragment? 为什么不在MainFragment中调用方法?
How can i fix it? 我该如何解决?

Perhaps your Fragment is in stopped state when event is fired. 触发事件时,您的Fragment可能处于停止状态。 Try to register, unregister in create/destroy lifecycle. 尝试注册,然后在创建/销毁生命周期中注销。

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

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

Suggestion 建议

By the way why are you using EventBus for just backpress implementation. 顺便说一句,为什么将EventBus用作backpress实施。 You can simply do this. 您可以简单地做到这一点。 If you fragment is child of DetailActivity . 如果片段是DetailActivityDetailActivity

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

You can use getFragmentManager().findFragmentByTag("tag") if you don't have fragment instance. 如果没有片段实例,则可以使用getFragmentManager().findFragmentByTag("tag")

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM