在我的应用程序中,我有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
时才调用上述方法,并非总是如此!
我该如何解决?
答案 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) {
//...
}