簡體   English   中英

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

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

在我的應用程序中,我想使用EventBus在另一個活動中調用某些方法。
我想在activityDetailActivity )中單擊backButton時,在fragmentMainFragment )中調用一個方法。
MainFragment中,我具有recyclerView並使用recyclerView adapter打開此activityDetailActivity )。

我下面寫的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();
}

詳細活動代碼:

@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實施。 您可以簡單地做到這一點。 如果片段是DetailActivityDetailActivity

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

如果沒有片段實例,則可以使用getFragmentManager().findFragmentByTag("tag")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM