Как использовать EventBus только в первый раз в Android - PullRequest
0 голосов
/ 29 декабря 2018

В моем приложении у меня есть 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, вызывайте Задание A всегда в порядке!
Я имею в виду: после нажатия на button, даже перейти к Activity C, E и другим ... и при нажатии на назад button для переходаActivity A снова вызовите вышеуказанный метод Activity A .
Я хочу вызвать вышеуказанный метод только при нажатии на button из Activity B, не всегда!

Как я могу это исправить?

1 Ответ

0 голосов
/ 29 декабря 2018

Если я правильно понял вашу ситуацию - у вас есть кнопка в одном действии, которая инициирует событие 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) {
  //...
}
...