Android: открыть активность без сохранения в стек
У меня есть 2 вида деятельности: основной и список.
из 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);The
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);
просто хотел добавить способ сделать это в Котлин:
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наIntenthttp://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); }
Comments