Отслеживание и очистка истории активности Android - PullRequest
1 голос
/ 18 марта 2019

Представьте себе этот стек истории действий:

A> B> C> D> E

сценарий 1:

Если пользователь находится на E , то при нажатии на кнопку возврата он должен перейти к D> C> B> A .

сценарий 2:

Если пользователь включен E , то при нажатии пользовательской кнопки «Показать B» , тогда он должен очистить E> D> C . Что похоже на Finish () .

Как X> Y, если мы установим finish на Y, будет отображаться X. Аналогично Если я записываю Показать B на E , тогда E> D> C следует удалить из стека.

Мне нужно реализовать оба сценария.

(отредактировано ^^^^ со сценариями)

Если пользователь активен E и хочет переместиться B . Если B находится в стеке истории, мы можем очистить C> D> E , чтобы пользователь мог перейти к B без startActivity (B). и А должно быть в истории.

Если действие доступно в стеке, оно должно загружаться из истории, если не startActivity (B).

Если я использую FLAG_ACTIVITY_CLEAR_TOP / FLAG_ACTIVITY_NEW_TASK, он очистит всю историю и начнет новую деятельность.

Я хочу очистить частичную историю.

Будет ли возможно достичь? Если да, то как это сделать, пожалуйста?

Ответы [ 2 ]

1 голос
/ 18 марта 2019

Это все довольно стандартно.Не используйте никаких специальных режимов запуска.Обычно нажатие НАЗАД просто завершает текущий Activity и возвращает вас к предыдущему.

Для этого случая:

Если пользователь находится на E, то при нажатии наПользовательская кнопка «Показать B», тогда она должна очистить E> D> C. Что похоже на Finish ().

В E, чтобы вернуться к существующему экземпляру B, сделайте это:

Intent intent = new Intent(this, B.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(intent);

Это завершит E, D и C и вернется к существующему экземпляру B.

Флаг FLAG_ACTIVITY_CLEAR_TOP говорит Android очистить все действия между текущимActivity и цель Activity.Если вы не указали FLAG_ACTIVITY_SINGLE_TOP, то существующий экземпляр цели Activity также будет завершен, и будет создан новый экземпляр.Если вы действительно укажете FLAG_ACTIVITY_SINGLE_TOP, то существующий экземпляр цели Activity НЕ будет завершен, а новый экземпляр НЕ будет создан .

0 голосов
/ 18 марта 2019

Вы можете добиться этого, используя

android:launchMode="singleTask"

в файле манифеста.Подробнее см. Эту документацию https://android.jlelse.eu/android-activity-launch-mode-e0df1aa72242

...