我的两个活动是:主要和列表。
你可以从主要打开列表;也可以从列表打开主要。
我希望每次打开列表时,它不会保存到“历史记录”中。因此,从主要页面返回不能返回到列表。
这是否可能?
你可以从主要打开列表;也可以从列表打开主要。
我希望每次打开列表时,它不会保存到“历史记录”中。因此,从主要页面返回不能返回到列表。
这是否可能?
当启动列表的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);
如果您在打开另一个活动后立即调用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);
Intent i = new Intent(...);
i.addFlag(Intent.FLAG_ACTIVITY_NO_HISTORY);
startActivity(i);
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)
}```
- 4ndro1d如果活动已经在运行,请尝试使用FLAG_ACTIVITY_CLEAR_TOP:
Intent intent = new Intent(this, MyActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
在你的Intent
中添加标志FLAG_ACTIVITY_NEW_TASK
http://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_NEW_TASK
情况:1
使用此标志
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
在这种情况下,活动转换不流畅,在启动活动之前会出现空白白页。
案例2:
Intent intent = new Intent(this, NextActivity.class);
startActivity(intent);
finish();
如果你的手机不够快,你会看到之前的活动正在消失,我希望今天大多数设备都能解决这个问题。
list
启动于main
,那么在startActivity(...)
之后立即调用finish()
函数。这样如果用户从main
返回,则不会有任何可以返回的内容。 - Squonkfinish()
来结束当前活动的建议! - user2297550