-2

在我的应用程序中,我有 2 activityActivityActivity
对于 show ActivityB用户应该从ActivityA去。
activityB中,我有一个button,当单击此button finish Activity B并将一种方法调用到Activity A时,我想要。
对于这项工作,我写了下面的代码:

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

对于调用ActivityA 的方法,我编写以下代码:

@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,甚至转到ActivityC、E等等……当点击返回button转到ActivityA时,再次调用 A 的上述Activity方法
我只想在buttonActivityB中单击时调用上述方法,但并非总是如此!

我该如何解决?

4

1 回答 1

2

如果我正确理解了您的情况 - 您在一个活动中有一个按钮来启动一个 eventBus 事件,而第二个活动订阅者是该事件的订阅者。

单击按钮后,您在另一个活动上运行一些注册向导,但您的问题是这个订阅的方法也调用了其他事件,您不想以这种方式处理。这个对吗?

实际上,我认为在这种情况下使用 eventBus 没有意义。如果您只想显示Activity Bfrom Activity A,当单击按钮时,只需使用 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) {
  //...
}
于 2018-12-29T07:04:33.260 回答