考虑我的应用程序包含活动A,B,C。 A从发射器发射,B从A发射.B有一个按钮。我的要求是单击B上的按钮,活动的当前历史记录A-> B应该清除,历史堆栈必须只包含C.是否可以这样做?如果是这样,请告诉我......
提前致谢!
答案 0 :(得分:3)
虽然乏味,但可以通过使用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,C转到A。
第三种方法是将A,B和C设置为使用noHistory,但是你将失去将C退回到B或A的能力。
答案 1 :(得分:0)
我的“解决方案”是覆盖活动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);
}