如何在 Android 中第一次使用 EventBus

How to use EventBus just for first time in Android

在我的申请中我有 2 activity.Activity AActivity B .
对于显示 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一个方法!
我的意思是: 点击 button 后,甚至转到 Activity C、E 等等...当点击返回 button 转到 Activity A 时再次调用 Activity A 的上述方法。
我想在从 Activity B 单击 button 时调用上面的方法,并非总是如此!

我该如何解决?

如果我正确理解你的情况 - 你有一个按钮 activity 启动 eventBus 事件,第二个 activity - 订阅此事件。

单击按钮后,您 运行 另一个 activity 上的一些注册向导,但您的问题是此订阅方法也会调用其他事件,您不想处理以这样的方式。这是正确的吗?

实际上,我看不出在这种情况下使用 eventBus 有什么意义。如果您只想显示 Activity A 中的 Activity B,当单击按钮时,只需使用 Intent 实例显示您的 activity:

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

我可能误会你了。你能补充更多关于你的情况的细节吗?

如果你需要使用eventBus,那么可能你多次调用订阅的事件是造成事件的原因sticky。 对通常的事件进行同样的尝试:

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

并在没有粘性标志的情况下处理它们:

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