我有2个活动:Main和List。
从Main可以打开List;从列表中可以打开Main。
我想它,以便名单的每一个开放并没有得到保存到“历史”。因此,从Main上按回去将无法返回到列表。
可能吗?
我有2个活动:Main和List。
从Main可以打开List;从列表中可以打开Main。
我想它,以便名单的每一个开放并没有得到保存到“历史”。因此,从Main上按回去将无法返回到列表。
可能吗?
Answers:
当开始您的列表时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);
改用。没有功能上的差异。
Intent
标志说明“仅在不返回Activity
原点时才添加到历史记录”。
在清单文件中添加:
android:noHistory="true"
您不想保留的活动。
使用新任务进行清除。在其他情况下,这在我的情况下可行。
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
看来,如果您在打开另一个活动后立即在活动上调用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);
较晚的答案,但增加了其他答案的深度。这一切都取决于您希望从该活动开始的其他活动中发生什么
选项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);
希望能解决其他问题:)
只是想添加一种在Kotlin中执行此操作的方法:
val i = Intent(this, LogInActivity::class.java)
startActivity(i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK))
Intent(this, MainActivity::class.java).apply { addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK) }.also { startActivity(it) }
将标志添加FLAG_ACTIVITY_NEW_TASK
到您的Intent
http://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_NEW_TASK
您是否可以不覆盖特定活动上的后退按钮来停止“返回”功能?
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
return true;
}
return super.onKeyDown(keyCode, event);
}
Activity
不是一个好习惯。
OnBackPressed
那个。
finish()
在之后立即调用它startActivity(...)
。这样,如果用户从“ main”按“ BACK”,将没有任何内容可返回。