所以我在我的应用程序中有一个巨大的活动迷宫。我需要做的是,当用户登录系统时,活动历史记录应该被清除。当我开始一个新的活动时,我不能使用finish(),因为我希望这些活动有一个历史记录,直到用户登录为止。我在开始一个活动时尝试了不同的标志,但是我没有成功。有任何想法吗?开始活动并清除活动历史记录
干杯,
所以我在我的应用程序中有一个巨大的活动迷宫。我需要做的是,当用户登录系统时,活动历史记录应该被清除。当我开始一个新的活动时,我不能使用finish(),因为我希望这些活动有一个历史记录,直到用户登录为止。我在开始一个活动时尝试了不同的标志,但是我没有成功。有任何想法吗?开始活动并清除活动历史记录
干杯,
我也可以透露我目前使用的解决我的问题的HAX。在“预登录”活动中,我已经将这个清单中的:在每个活动
android:noHistory="true"
然后,我有这样的代码:
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
Intent intent = new Intent(MyActivity.this, ParentActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
startActivity(intent);
return true;
}
return super.onKeyDown(keyCode, event);
}
的FLAG_ACTIVITY_NO_ANIMATION仅适用于手机与API级别5或更高,但它所做的是在“开放新活动” - 动画,“回到上一个活动” - 动画播放(至少在机器人和连线上)。这可以防止当用户按下后退按钮时启动新活动的混淆现象。
该解决方案并不完美。在API级别低于5的手机上,动画变得不正确。此外,它不是超级整洁,需要更多的代码,然后我更喜欢。尽管如此,它的工作原理...
你可以尝试模拟“回归”到以前的活动(即,当然,当使用65536
,而不是Intent.FLAG_ACTIVITY_NO_ANIMATION
为早期版本
这完全为我工作,而不是真的那里)。谢谢!我打算用默认的动画ID完成这个工作,但令我惊讶的是,这些都不公开。去搞清楚。 – dmon 2011-10-17 15:38:33
如果你实际使用的是keyDown,你应该返回true而不是调用super – njzk2 2012-11-05 13:37:03
的确如此,我已经更正了我的答案。 – pgsandstrom 2012-11-05 14:23:26