[英]How to use EventBus in Activity and Fragment on Android
在我的应用程序中,我想使用EventBus在另一个活动中调用某些方法。
我想在activity
( DetailActivity )中单击backButton
时,在fragment
( MainFragment )中调用一个方法。
在MainFragment中,我具有recyclerView
并使用recyclerView adapter
打开此activity
( DetailActivity )。
我下面写的DetailActivity和MainFragment代码,但点击时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();
}
详细活动代码:
@Override
public void onBackPressed() {
finishWithAnimate();
EventBus.getDefault().post(new EventUpdateAuctionsState());
}
EventUpdateAuctions状态代码:
public class EventUpdateAuctionsState {
public EventUpdateAuctionsState() {
}
}
为什么不在MainFragment中调用方法?
我该如何解决?
触发事件时,您的Fragment可能处于停止状态。 尝试注册,然后在创建/销毁生命周期中注销。
public void onCreate() {
super.onCreate();
EventBus.getDefault().register(this);
}
@Override
public void onDestroy() {
super.onDestroy();
EventBus.getDefault().unregister(this);
}
建议
顺便说一句,为什么将EventBus用作backpress实施。 您可以简单地做到这一点。 如果片段是DetailActivity
子DetailActivity
。
@Override
public void onBackPressed() {
finishWithAnimate();
// get your fragment
if(fragment!=null) fragment.onRefreshAuctions();
}
如果没有片段实例,则可以使用getFragmentManager().findFragmentByTag("tag")
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.