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" 

к активности, которую вы не хотите хранить в стеке.

Ответ 4

Кажется, если вы назовете закончить() в своей деятельности сразу после того, как вы открыли другой, то тот, который завершен, удаляется из стека.

например:

Intent intent = new Intent(this, NextActivity.class);
startActivity(intent);
finish();

Ответ 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);
}