Как очистить конкретную активность от истории стека?

Предположим, у меня есть приложение, содержащее действия с именами A, B, C, D. Теперь рассмотрим, что A был запущен как корневая активность, и B был запущен из A и C, запущен из B и D, запущен с C. Теперь у меня есть кнопка «Удалить» в действии D. Если предположим, Я нажимаю кнопку «Удалить» в действии D, тогда активность B и активность C следует удалить из стека истории. On Нажатие клавиши возврата из действия D должно отображать activiy A вместо C. Я не знаю, как это реализовать. Может ли кто-нибудь помочь мне решить эту проблему?

Я не уверен, что вы можете напрямую программно удалить действия из истории, но если вы используете startActivityForResult() вместо startActivity() , то в зависимости от возвращаемого значения из вашей активности вы можете сразу же finish() предшествующую активность для имитации поведение, которое вы хотите. Используя этот метод во всех ваших действиях, это поведение может привести к каскадированию стека активности, чтобы вы могли перейти от действия D к активности A.

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

См. Раздел «Время жизни нового экрана» в « Общих задачах» и «Как сделать их на Android».

Я согласен с @RivieraKid, но я думаю о другом: когда вы нажимаете «Удалить», вы устанавливаете собственный флаг в true.

Переопределить событие задней клавиши:

 public void onBackPressed() { if (!remove){ super.onBackPressed(); }else{ Intent goToA = new Intent((this,ActivityA.class);); goToA.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(goToA); } } 

Вы думаете, что это делает то, что вы хотите?

Удачи.

У RivieraKid есть лучший ответ (и classный логин), но для полноты я хотел бы упомянуть, что вы также можете установить флаг FLAG_ACTIVITY_NO_HISTORY в намерении, чтобы вновь запущенная деятельность не появлялась в истории. См. http://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_NO_HISTORY

Когда вы запускаете приложение. Все действия запускаются по одной и той же задаче по умолчанию. Таким образом, задний стек выглядит так, как показано ниже.

Задача: A-> B-> C-> D в этом случае верхняя часть задней панели указывает на «D»

Теперь, если вы хотите снова нажать TOP на «A». Просто объявите атрибут

 android:launchMode="singleTask" 

для действия «A» в вашем AndroidManifest.xml

Теперь, когда вы нажимаете кнопку «Удалить» в действии «D», просто запустите действие, как обычно, как и вы. Задний стек очищается от действий «B» и «C», и вы получаете чистый старт от активности «A»,

Помните, что это закроет и уничтожит вашу активность D из памяти, даже если вы не назовете finish() явно в «D»,

Я думаю, что это будет делать то, что вы хотите. В файле манифеста просто добавьте атрибут «noHistory» к действиям «B» и «C», которые вы не хотите пересматривать при нажатии кнопки «Назад» в «D».

      

Альтернативой является создание classа для доступа к действиям и их закрытия. Пример:

Мероприятия:

  • ACT1
  • act2
  • ACT3

Класс управления:

 public class ActivitiesControl { public static act1 vAct1 = null; public static act2 vAct2 = null; public static act3 vAct3 = null; } 

В onCreate каждого действия вы устанавливаете: ActivitiesControl.vAct1 = this;

и onDestroy (): ActivitiesControl.vAct1 = null;

Если вы хотите уничтожить некоторые действия, чтобы удалить их из stackhistory, вы просто вызываете:

ActivitiesContro.vAct1.finish ();

Я не знаю, является ли это лучшим методом, но это то, что сработало для меня.

  • Как анализировать память с помощью студии Android
  • Изменение продолжительности тайм-аута волейбола
  • Удаление старого fragmentа из диспетчера fragmentов
  • Android M Camera Intent + ошибка разрешения?
  • Правый выравнивающий текст в android TextView
  • Приемник широковещательной передачи не работает в ICS, если приложение не запускается по крайней мере один раз
  • Ресурсы Android $ NotFoundException: Идентификатор ресурса # 0x7f030027
  • Импорт com.google.android.gms невозможен.
  • Android, что делает атрибут clipToPadding?
  • Android: очистить задний стек
  • Добавить высоту / тень на панели инструментов для устройств с предварительным леоптипом
  • Interesting Posts
    Давайте будем гением компьютера.