Android: открытая активность без сохранения в стеке
У меня есть 2 действия: Main и List.
От Main вы можете открыть List; из списка вы можете открыть Main.
Мне бы хотелось, чтобы каждое открытие списка не сохранялось в "истории". Таким образом, нажатие клавиши Main не может вернуться к списку.
Возможно ли это?
Ответы
Ответ 1
При запуске вашего списка Activity
установите Intent
флаги:
Intent i = new Intent(...); // Your list Intent
i.setFlags(i.getFlags() | Intent.FLAG_ACTIVITY_NO_HISTORY); // Adds the FLAG_ACTIVITY_NO_HISTORY flag
startActivity(i);
Флаг FLAG_ACTIVITY_NO_HISTORY
не добавляет новый Activity
в стек истории.
Примечание. Как указывает @Sam, вы можете использовать i.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
. Функциональной разницы нет.
Ответ 2
В файле манифеста добавьте:
android:noHistory="true"
к активности, которую вы не хотите хранить в стеке.
Ответ 3
Используйте новую задачу с очисткой. Это сработало в моем случае, когда другие параметры не сделали.
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
Очистите весь стек истории и запустите новое действие на Android
Ответ 4
Кажется, если вы назовете закончить() в своей деятельности сразу после того, как вы открыли другой, то тот, который завершен, удаляется из стека.
например:
Intent intent = new Intent(this, NextActivity.class);
startActivity(intent);
finish();
Ответ 5
добавьте флаг FLAG_ACTIVITY_NEW_TASK
в Intent
http://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_NEW_TASK
Ответ 6
В моем конкретном случае FLAG_ACTIVITY_NO_HISTORY
не работал. Ни один из них не работал FLAG_ACTIVITY_NEW_TASK
или FLAG_ACTIVITY_CLEAR_TASK
.
Однако FLAG_ACTIVITY_NEW_TASK
и FLAG_ACTIVITY_CLEAR_TASK
вместе работали.
Intent intent = new Intent(FooActivity.this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
Ответ 7
Не можете ли вы переопределить кнопку "Назад" для конкретной активности, чтобы остановить функциональность "return"?
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
return true;
}
return super.onKeyDown(keyCode, event);
}