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);
}