簡體   English   中英

如何在 Android 中首次使用 EventBus

[英]How to use EventBus just for first time in Android

在我的應用程序中,我有 2 個activity Activity AActivity B。
對於 show Activity B用戶應該從Activity A轉到。
activity B 中,我有一個button ,我希望在單擊此button finish Activity B並將一個方法調用到Activity A 中
對於這項工作,我寫了以下代碼:

       baseDialog_positiveBtn.setOnClickListener(v -> {
            EventBus.getDefault().postSticky(new BuyPremiumUserEvent(true));
            finish();
        });

對於調用方法到Activity A 我寫下面的代碼:

@Subscribe(sticky = true, threadMode = ThreadMode.MAIN)
public void onBuyPremium(final BuyPremiumUserEvent event) {
    clickedOnBuyPremium = event.isClickOnBuyPremium();
    Log.e("clickedOnBuyPremium", "Event : " + clickedOnBuyPremium);
    if (AppConstant.getInstance().isPackageInstalled(AppConstant.BAZAAR_PAYMENT_PACKAGE, packageManager)) {
        initBazaarUserRegistered();
    } else {
        AppConstant.getInstance().showMessage(activity, getString(R.string.errorTitle),
                getString(R.string.notInstalledBazaar), R.color.catRedColor);
    }
}

當點擊Button ,調用上面的方法!
但是當點擊Button ,總是調用Activity A方法!
我的意思是:點擊后button ,甚至到Activity C,E和更多...並在背面時,單擊button為進入Activity一遍撥打上面的方法Activity
我想在單擊Activity B 中的button時調用上述方法,並非總是如此!

我該如何解決?

如果我正確理解了您的情況 - 您在一個活動中有一個按鈕來啟動 eventBus 事件,以及該事件的第二個活動訂閱者。

單擊按鈕后,您在另一個活動上運行一些注冊向導,但您的問題是這個訂閱的方法也調用了其他事件,您不想以這種方式處理。 這樣對嗎?

實際上,我認為在這種情況下沒有必要使用 eventBus。 如果您只想顯示Activity B Activity A Activity B ,則單擊按鈕時,只需使用 Intent 實例顯示您的活動:

Intent intent = new Intent(this, ActivityB.class)
startActivity(intent)

我可能會誤會你。 你能添加更多關於你的情況的細節嗎?

如果您需要使用 eventBus,那么您對訂閱事件的多次調用可能是導致 event sticky的原因。 對通常的事件嘗試相同的方法:

 baseDialog_positiveBtn.setOnClickListener(v -> {
            EventBus.getDefault().post(new BuyPremiumUserEvent(true));
            finish();
        });

並在沒有粘性標志的情況下處理它們:

@Subscribe(threadMode = ThreadMode.MAIN)
public void onBuyPremium(final BuyPremiumUserEvent event) {
  //...
}

暫無
暫無

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

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