我想完成这个结构:
活动A正在显示。如果按下某个按钮,则打开活动B(不关闭A的当前实例)。如果我按下B的后退按钮,我只想完成B,这样我就可以看到我的旧A实例。但如果在活动B中我按下另一个按钮,我想关闭A并打开C.
如何在活动B打开时关闭活动A并启动活动C?
说明: 当B处于活动状态时,A 不得被销毁,以便我可以返回它。但是如果我想打开C然后A 必须被销毁,那么如果我按下C的后退按钮我将不会再看到它了。
我已经实现了使用startActivity()和finish()方法打开所有活动的代码。我现在所需要的只是回答或建议我如何改造我的结构以实现我的目标。
编辑
我想我有一个想法,当我想打开B时使用startActivtyForResult(),这样当我准备打开C时,我只是让A做到这一点关闭自己。
答案 0 :(得分:5)
当您按按钮C 转到ActivityC时,您只需要按意图传递addFlag方法,如下所示
public void onClick(View v) {
if(v.getId()==R.id.butoonC){
Intent intent = new Intent(this, ActivityC.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
}
}
此处 Intent.FLAG_ACTIVITY_CLEAR_TOP 将移除活动堆栈中的所有活动,但活动B 和活动C 除外。所以当你从活动B反印时,你的活动将无法返回活动A. 我希望这对你有用
答案 1 :(得分:0)
以下是我解决问题的方法:
活动A:
//Start Activity B
startActivityForResult(new Intent(this, B.class), 1);
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == RESULT_OK) {
startActivity(new Intent(this, C.class));
finish();
}
}
活动B:
//back button press:
setResult(RESULT_CANCELED, new Intent());
finish();
//start Activity C button:
setResult(RESULT_OK, new Intent());
finish();
希望它会对某人有所帮助。
答案 2 :(得分:0)
我用这个为我工作
在活动A中,当按下按钮以转到活动B时,请使用以下代码:
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(ActivityA.this, ActivityB.class);
startActivity(intent);
ActivityA.this.finish();
}
});
它是活动A的关闭状态,当按下后退按钮时,请勿返回该活动。