Отслеживание и очистка истории активности Android

1

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

A> B> C> D> E

сценарий 1:

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

сценарий 2:

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

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

Мне нужно достичь обоих сценариев.

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

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

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

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

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

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

Теги:
android-activity
android-navigation

2 ответа

1
Лучший ответ

Это все довольно стандартно. Не используйте никаких специальных режимов запуска. Обычно нажатие НАЗАД просто завершает текущую 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 НЕ будет закончен, и новый экземпляр не будет создан.

-1

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

android:launchMode="singleTask"

в вашем файле манифеста. Для получения дополнительной информации обратитесь к этой документации https://android.jlelse.eu/android-activity-launch-mode-e0df1aa72242

  • 0
    Пожалуйста, не предлагайте использовать специальные режимы запуска singleTask или singleInstance . Это создает больше проблем, чем решает, побочные эффекты недостаточно хорошо документированы или недооценены, и они не нужны в 99% случаев. Это плохой совет.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню