запускать активность дважды даже с launchMode = "singleTask" - PullRequest
0 голосов
/ 26 февраля 2020

У меня есть действие для отображения сведений о туре с двумя несовместимыми целями.

Сначала у этого действия есть кнопка бронирования, которая перенаправляет на банковские платежи и возвращает к действию после успешной или неудачной оплаты. Вот почему я установил Launch Mode в манифесте, чтобы остановить повторное создание действия.

android:launchMode="singleTask"

Second , что действие имеет кнопку, которая перенаправляет на аналогичный тур, тогда я должен вызвать finish(); до startActivity(), чтобы заставить намерение работать!

onNewIntent() внутри действия, чтобы получить данные первой части

@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    if (intent.getData() != null) {
        Helper.logDebug("fsfsfsgsgsgs", "inside get data not null");
        String query = intent.getData().getQuery();
        Helper.logDebug("fsfsfsgsgsgs","query is "+ query);
        if (query!=null && query.contains("Status=OK")) {
            if (frgBtmReserve!=null){
                frgBtmReserve.dismiss();
            }
            String count=query.substring(16);
            Helper.logDebug("fsfsfsgsgsgs","count is "+ count);
            frgObjectInfo.updateReserveCount(count);
            Helper.logDebug("fsfsfsgsgsgs", "inside status ok");
            Helper.notifyUserDone(getResources().getString(R.string.success_tour_reserve), this,R.drawable.ic_tick);
        } else {
            frgBtmReserve.dismiss();
            Helper.logDebug("fsfsfsgsgsgs", "inside status nok");
            Helper.notifyUserWarning(getResources().getString(R.string.error_tour_reserve), this);
        }
    }
}

по щелчку второй части , который должен создать новый экземпляр текущей активности, но не из-за режима запуска активности, который singleTask .intent не работает, пока я finish() до startActivity()

Intent intent = new Intent(context, ActivityShowObject.class);
            intent.putExtra(ActivityShowObject.INTENT_KEY_TYPE, Obj.TYPE_TRAVEL);
            intent.putExtra(ActivityShowObject.INTENT_KEY_COLOR, color);
            intent.putExtra(ActivityShowObject.INTENT_KEY_OBJ_ID, obj.getAgencyId());
            ((AppCompatActivity)context).finish();
            startActivity(intent);
            Animatoo.animateShrink(context);

это моя проблема подумайте о пользователе, который изучает некоторые похожие туры, затем нажмите назад, и приложение вернется к самому первому шагу! ребята, у вас есть предложение для меня?

1 Ответ

1 голос
/ 26 февраля 2020

Избавьтесь от

android:launchMode="singleTask"

для начала. Я думаю, что это неправильный вариант использования, что усложняет для вас.

У вас есть два сценария ios:

  • 1) Новая плата за активность в этом туре
  • 2) Новое занятие. Просмотрите другой тур

для # 2, используйте обычный маршрут startActivity, это позволит вернуться назад

для # 1, вы также можете использовать обычный startActivity но у меня есть ощущение, что, когда они платят успешно, вы не хотите, чтобы они возвращались к go обратно в тур, но если им не удается заплатить, вы хотите разрешить им go вернуть?

В этом случае вы можете использовать startActivityForResult при переходе к вашему сценарию оплаты №1.

Когда они успешно завершат платеж, позвоните

setResult(RESULT_OK)

, если они не увенчались успехом

setResult(RESULT_CANCELLED)

Затем, когда они ответят, результат распространяется на первое действие, и Вы используете это, чтобы позвонить finish() или нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...