Как завершить любую предыдущую операцию в стеке приложения (на любом уровне, я имею в виду не непосредственный родитель), из текущей активности, например, на каком-то конкретном событии, я хочу аннулировать предыдущую операцию? Любая помощь? Спасибо.
Завершить любое предыдущее действие в стеке из текущей активности?
Ответ 1
Это может быть возможно с использованием статических переменных. Например, используйте логическую переменную activity_name_dirty = false; отметьте это как истину, как только ваше условие недействительности этой конкретной деятельности. Поэтому в любое время позже при вызове этого действия есть проверка состояния activity_name_dirty. Затем вы можете использовать флаги активности для создания нового момента, как описано в Основы деятельности
Ответ 2
Я знаю, что этот ответ может быть запоздалым, но я все равно отправлю его на случай, если кто-то ищет что-то вроде этого.
Что я сделал, я объявил статический обработчик в ACTIVITY_A
public static Handler h;
и в моем методе onCreate()
для ACTIVITY_A
у меня есть
h = new Handler() {
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch(msg.what) {
case 0:
finish();
break;
}
}
};
Теперь из любой активности после этого, например ACTIVITY_B
или ACTIVITY_C
, я могу позвонить
ACTIVITY_A.h.sendEmptyMessage(0);
который затем вызывает finish()
в ACTIVITY_A
и ta-da! ACTIVITY_A
завершается из другого действия.
Ответ 3
Вы можете использовать флаг Intent FLAG_ACTIVITY_CLEAR_TOP
, чтобы перезапустить действие из стека и очистить все, что было над ним. Это не совсем то, что вы просите, но это может помочь.
Для этого используйте:
Intent intent = new Intent(context, classToBeStarted.class);
intent.setFlag(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
Ответ 4
Итак, я устал от этого, но не работал после того, как я сделал более глубокое тестирование (я оставляю его здесь для дальнейшего использования): android:clearTaskOnLaunch
Предположим, например, что кто-то запускает активность P с главного экрана, а оттуда переходит в действие Q. Затем пользователь нажимает на Home, а затем возвращается к активности P. Обычно пользователь будет видеть активность Q, поскольку это то, что они в последний раз делали в задаче P. Однако, если P установил этот флаг в значение "true", все действия над ним (Q в этом случае) были удалены, когда пользователь нажал "Домой", и задача перешла на задний план. Таким образом, пользователь видит только P, когда возвращается к задаче.
https://developer.android.com/guide/topics/manifest/activity-element.html
UPDATE Это действительно работало
Intent intent = new Intent(this, MyActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASK);
this.startActivity(intent);