Как использовать EventBus только в первый раз в Android
В моем приложении у меня есть 2 activity
,Activity
А и Activity
Б.
Для видимости Activity
ПользователиB должны перейти от Activity
А.
В activity
У меня есть один button
и я хочу, когда нажмите на это button
finish
Упражнение B и вызов одного метода в занятии A.
Для этой работы я пишу код ниже:
baseDialog_positiveBtn.setOnClickListener(v -> {
EventBus.getDefault().postSticky(new BuyPremiumUserEvent(true));
finish();
});
И для вызова метода в Activity
А я пишу ниже код:
@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 и многое другое... и когда нажмите на спинуbutton
для перехода вActivity
Снова вызов метода выше Activity
А.
Я хочу вызвать метод выше, только когда нажимаете на button
от Activity
Б, не всегда!
Как я могу это исправить?
1 ответ
Если я правильно понял вашу ситуацию - у вас есть кнопка в одном действии, которая инициирует событие 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) {
//...
}