如何在Android中首次使用EventBus

时间:2018-12-29 06:30:04

标签: java android greenrobot-eventbus-3.0

在我的应用程序中,我有2个activity Activity A Activity B
对于节目 Activity B ,用户应从 Activity A 转到。
activity B 中,我有一个button,我想单击此button finish 活动B 并打电话活动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 等等……然后点击返回{{ 1}}转到 button A ,再次调用上述 Activity A 方法。
我想仅在 Activity B 中单击button时才调用上述方法,并非总是如此!

我该如何解决?

1 个答案:

答案 0 :(得分:2)

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

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

实际上,在这种情况下,我认为没有必要使用eventBus。如果您只想显示Activity B中的Activity A,请在单击按钮时使用Intent实例显示您的活动:

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) {
  //...
}