如何在 Android 中第一次使用 EventBus
How to use EventBus just for first time in Android
在我的申请中我有 2 activity
.Activity
A 和 Activity
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) {
//...
}
在我的申请中我有 2 activity
.Activity
A 和 Activity
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) {
//...
}