如何在 Activity 中使用 EventBus 并在 Android 中使用 Fragment
How to use EventBus in Activity and Fragment on Android
在我的应用程序中,我想使用 EventBus 来调用另一个 activities 中的一些方法。
我想在activity
(DetailActivity)中点击backButton
时,调用fragment
(MainFragment).
在 MainFragment 我有 recyclerView
并用 recyclerView adapter
.[=47 打开这个 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();
}
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")
。
在我的应用程序中,我想使用 EventBus 来调用另一个 activities 中的一些方法。
我想在activity
(DetailActivity)中点击backButton
时,调用fragment
(MainFragment).
在 MainFragment 我有 recyclerView
并用 recyclerView adapter
.[=47 打开这个 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();
}
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")
。