Страницы

Поиск по вопросам

понедельник, 10 февраля 2020 г.

Удалить конкретное activity из стека

#android #activity #stack


Как удалить конкретное activity из стека? вот пример, есть  activty A,B,C, пользователь
переходит A->B->C, и в activty C в определенных условиях, 


надо вернуться назад(activty B) (делаю finish)
надо вернуться назад(сразу в activty A минуя activty B, при этом не пересоздавая
activty A, как это сделать?)


//делаю так, он пересоздает activty  A

Intent intent = new Intent(this, A);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

    


Ответы

Ответ 1



Городить код с запуском активити через onActivityResult() - нерационально. Следует назначить активити А android:launchMode="singleTask". И запустив startActivity(new Intent(this, A) активити А вытащится из стека не пересоздаваясь, попутно закрыв верхние активити.

Ответ 2



Ответ на вопросы: Что бы вернуться с активити С на В, ты все делаешь правильно, просто вызываешь finish() у активити С. Что бы вернуться с С на А нужно немного добавить логики. Когда запускаешь активити С, делай это через: startActivtyForResult(new Intent(this, C.class), 1234) При завершении С, перед вызовом finish(), в обратный интент кинь флаг нужно ли завершиться активити В или нет: Intent answerIntent = new Intent(); Bundle bundle = new Bundle(); bundle.putBoolean("need_finish", true); answerIntent.putExtras(bundle); setResult(RESULT_OK, answerIntent); Активити В обрабатывает метод onActivityResult. Если флаг true, то тоже вызываешь finish() у В : onActivityResult(int requestCode, int resultCode, Intent data){ if (requestCode == 1234 && data != null) { if (data.getBoolean("need_finish", true)) { finish(); } } }

Комментариев нет:

Отправить комментарий