我有2项活动:Main和List。
从Main您可以打开List;从列表中,您可以打开Main。
我希望List的每个开头都不保存到'历史'中。因此,从Main 按回来不能返回List。
有可能吗?
答案 0 :(得分:137)
开始列表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
不会被添加到历史堆栈中。
注意:正如@Sam指出的那样,您可以使用i.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
代替。没有功能差异。
答案 1 :(得分:81)
在清单文件中添加:
android:noHistory="true"
到您不想保留在堆栈中的活动。
答案 2 :(得分:23)
将新任务与清除结合使用。当其他选项没有时,这适用于我的情况。
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
Clear the entire history stack and start a new activity on Android
答案 3 :(得分:18)
看来,如果你在打开另一个活动后立即调用了活动中的finish(),那么已完成的活动将从堆栈中删除。
例如:
Intent intent = new Intent(this, NextActivity.class);
startActivity(intent);
finish();
答案 4 :(得分:4)
在我的特定情况下,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);
答案 5 :(得分:2)
只是想在Kotlin中添加一种方法:
val i = Intent(this, LogInActivity::class.java)
startActivity(i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK))
答案 6 :(得分:1)
将标记FLAG_ACTIVITY_NEW_TASK
添加到您的Intent
http://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_NEW_TASK
答案 7 :(得分:1)
最新答案,但为其他答案增加了一些深度。一切都取决于您希望从该活动开始的其他活动会发生什么
选项1-仅此一项活动不应具有通话活动历史记录
然后就做:
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);
希望能清除其他答案:)
答案 8 :(得分:0)
如果活动已经在运行,请尝试FLAG_ACTIVITY_CLEAR_TOP:
Intent intent = new Intent(this, MyActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
答案 9 :(得分:-3)
您是否可以覆盖特定活动的后退按钮以停止“返回”功能?
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
return true;
}
return super.onKeyDown(keyCode, event);
}