考虑一下包含活动A,B,C的应用程序。 A从启动器启动,B从A启动。B有一个按钮。我的要求是单击B上的按钮活动的当前历史堆栈A-> B应该清除,并且历史堆栈只能包含C.是否可以执行?如果是这样,请告诉我...如何清除堆栈历史记录?
在此先感谢!
考虑一下包含活动A,B,C的应用程序。 A从启动器启动,B从A启动。B有一个按钮。我的要求是单击B上的按钮活动的当前历史堆栈A-> B应该清除,并且历史堆栈只能包含C.是否可以执行?如果是这样,请告诉我...如何清除堆栈历史记录?
在此先感谢!
虽然单调乏味,但可以通过使用Activity方法startActivityForResult(),setResult(),finish()和onActivityResult()来启动。
在伪代码:
A: startActivityForResult(B)
B: startActivityForResult(C)
C: startActivity(D); setResult(CLEAR); finish()
D: ...
B: (onActivityResult) setResult(CLEAR); finish()
A: (onActivityResult) finish()
如果你愿意改变你的架构有点更“自然”的方式来做到这一点是使用FLAG_ACTIVITY_CLEAR_TOP一种简单的方法,从A,B去,到刚刚A.
第三种方法是设置A,B,和C使用noHistory,但你会失去备份的C伸到B或A.
我的“解决方案”的能力是重写活动C中后退按钮的行为,以便它转到电话启动器,而不是返回活动堆栈。这样,活动A和B仍然在后面的堆栈上,但用户无法导航回到它们。所以最终结果与活动C是根活动相同。
/**
* Override "Back" key on Android 1.6
* Don't want user going back to Login or Register forms.
*/
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
goHome();
return true;
}
return super.onKeyDown(keyCode, event);
}
/**
* Override "Back" key on Android 2.0 and later
*/
@Override
public void onBackPressed() {
goHome();
}
private void goHome() {
Intent startMain = new Intent(Intent.ACTION_MAIN);
startMain.addCategory(Intent.CATEGORY_HOME);
startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(startMain);
}
意图goHome = new Intent(CreateView.this,HomeActivity.class); \t \t \t \t goHome.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); \t \t \t \t startActivity(goHome); – 2011-07-01 01:58:11