Закрытие нескольких операций андроида одновременно

В моем приложении можно перейти посредством нескольких Операций, пока стек Activity не довольно глубок.

Мы хотели бы кнопку на каждом Действии, которое возьмет Вас назад к главному меню - т.е. вытолкает все Операции от стека кроме первого.

Я поместил кнопку в Представление, что я могу легко поставить каждое Действие в приложении, но я не могу выяснить, как закрыть несколько Операций одним махом.

(Если возможно, было бы хорошо, если Представление могло бы удаться, сколько Операций к рядом с собой - т.е. обнаруживают, как глубоко на стеке его собственное Действие.)

7
задан teedyay 17 March 2010 в 11:56
поделиться

2 ответа

Посмотрите на флаг намерения FLAG_ACTIVITY_CLEAR_TOP , который говорит, что он переносит целевое действие на вершину стека, удаляя все остальное, что могло быть выше него. Поэтому используйте эту кнопку, которую вы можете добавить ко всем своим действиям, чтобы запустить намерение, которое нацелено на ваше главное меню, с установленным флагом.

Из документации:

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

Например, рассмотрим задачу , состоящую из действий: A, B, C, D. Если D вызывает startActivity () с намерением , которое приводит к компонент действия B, то C и D будут завершены, и B получит заданное намерение, в результате чего стек теперь будет: A, B.

Текущий запущенный экземпляр действия B в приведенном выше примере либо получит новое намерение, которое вы , начиная здесь, в своем методе onNewIntent () . , либо быть завершенным и перезапущенным с новым намерением. Если он объявил свой режим запуска как "множественный" (по умолчанию), и вы не установили FLAG_ACTIVITY_SINGLE_TOP в с тем же намерением, то он будет быть законченным и воссозданным; для всех других режимов запуска или если установлен FLAG_ACTIVITY_SINGLE_TOP, то это намерение будет доставлено в onNewIntent () текущего экземпляра .

Этот режим запуска также можно использовать для хорошего эффекта в сочетании с FLAG_ACTIVITY_NEW_TASK: если он используется для запуска корневого действия задачи, он переведет любой запущенный в данный момент экземпляр этой задачи на передний план , а затем очистит его до корневого состояния . Это особенно полезно, например, при запуске действия из диспетчера уведомлений .

16
ответ дан 6 December 2019 в 14:03
поделиться

Вы можете объявить эту первую активность android:launchMode="singleTask" (more) и затем просто запустить ее с помощью Intent.

EDIT: Мое предложение основано на предположении, что вы хотите иметь единственный экземпляр Activity для возврата к нему. В противном случае оно неверно.

-1
ответ дан 6 December 2019 в 14:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: