Android: открыть активность без сохранения в стек

У меня есть 2 вида деятельности: основной и список.

из Main вы можете открыть список; из списка вы можете открыть Main.

Я бы хотел, чтобы каждое открытие списка делало не сохранить в "истории". Итак, нажатие назад от Main не может вернуться к списку.

возможно ли это?

10 ответов


при запуске вашего списка Activity, установить его Intent флаги вот так:

Intent i = new Intent(...); // Your list's Intent
i.setFlags(i.getFlags() | Intent.FLAG_ACTIVITY_NO_HISTORY); // Adds the FLAG_ACTIVITY_NO_HISTORY flag
startActivity(i);

на FLAG_ACTIVITY_NO_HISTORY флаг сохраняет новый Activity добавление в стек истории.

NB: как указывает @Sam, вы можете использовать i.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); вместо. Функциональной разницы нет.


в файле манифеста добавить:

android:noHistory="true" 

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


используйте новую задачу с очисткой. Это сработало в моем случае, когда других вариантов не было.

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);

очистить весь стек истории и начать новую деятельность на Android


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

например:

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

в моем конкретном случае 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);

просто хотел добавить способ сделать это в Kotlin:

val i = Intent(this, LogInActivity::class.java)
startActivity(i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK))

добавить флаг FLAG_ACTIVITY_NEW_TASK на Intent

http://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_NEW_TASK


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

Вариант 1-только это одно действие не должно иметь истории вызова activity

тогда просто сделай:

Intent i = new Intent(...);
i.addFlag(Intent.FLAG_ACTIVITY_NO_HISTORY);
startActivity(i);

Вариант 2-все действия, начатые с этой конкретной деятельности, не должны иметь истории

затем добавьте в манифест вызова активность:

android:noHistory="true" 

но если вы хотите иметь историю в новой деятельности, то вам нужно вручную удалить флаг:

Intent i = new Intent(...);
i.removeFlag(Intent.FLAG_ACTIVITY_NO_HISTORY);
startActivity(i);

надеюсь, что проясняет другие ответы :)


попробуйте FLAG_ACTIVITY_CLEAR_TOP, если действие уже запущено:

Intent intent = new Intent(this, MyActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

не можете ли вы переопределить кнопку "Назад" в конкретном действии, чтобы остановить функцию "возврат"?

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {

        return true;
    }
    return super.onKeyDown(keyCode, event);
}