[英]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.