Как использовать EventBus только в первый раз в Android

В моем приложении у меня есть 2 activity,ActivityА и ActivityБ.
Для видимости ActivityПользователиB должны перейти от ActivityА.
В activityУ меня есть один button и я хочу, когда нажмите на это buttonfinish Упражнение 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) {
  //...
}
Другие вопросы по тегам