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



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



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



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



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

402   10  

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

Comments

    Ничего не найдено.