从另一个活动恢复活动

时间:2013-11-26 06:25:40

标签: android android-lifecycle activity-stack

我有“新游戏”和“恢复”按钮的MenuActivity。 “新游戏”启动FireRoomActivity。

public void newGame(View view){
        Intent intent = new Intent(this, FireRoomActivity.class);
        this.finish();  
        startActivity(intent);
    }

在FireRoomActivity中,onBackPressed被覆盖以返回MenuActivity。

@Override
public void onBackPressed() {
    super.onBackPressed();
    Intent inMain=new Intent(this, MenuActivity.class);
    startActivity(inMain);
}

MenuActivity中的“恢复”按钮应该恢复FireRoomActivity.But这只是退出应用程序。

public void resume(View view){
    this.finish();
}

Q1)我做错了什么?

Q2)如果我添加第三个活动“ThreeActivity”并从FireRoomActivity启动它(完成FireRoomActivity),并在这个“ThreeActivity”覆盖onBackPressed转到MenuActivity,我该怎么办呢?

我是android生命周期的新手,所以我很感激详细的回复

5 个答案:

答案 0 :(得分:2)

1)你正在搞乱自然秩序。没有必要在“新游戏”方法中调用“完成”。

将活动留在堆栈上,以便在按后退键时可以返回到该活动。然后,当按下后退键时,您不需要启动新活动,因为您已经返回到已有的MenuActivity。

您的简历方法是调用完成,因此关闭菜单。而不是“完成”菜单,输入你的代码来恢复游戏。

2)了解活动生命周期。一旦你明白这一点,你就会更好地处理这个问题。如果您要返回活动,则无需在启动另一个活动时完成活动。把它们想象成堆栈。您将活动放在堆栈上,后退按钮将它们再次弹回。只有当您完成一项活动并且永远不想再看到它时,您才能完成一项活动。

答案 1 :(得分:1)

**Try This**
======================
public void onBackPressed() {
Intent i = new Intent(getApplicationContext(), MenuActivity.class);
            i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            i.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
            startActivity(i);
            finish();
}

答案 2 :(得分:0)

尝试:

@Override
public void onBackPressed() {
    Intent inMain=new Intent(this, MenuActivity.class);
    startActivity(inMain);
}  

onBackPressed()本身完成了活动。在这种情况下,如果您按下FireRoomActivity中的“后退”按钮,它将始终暂停。所以如果你想完成它,你需要调用finish();

答案 3 :(得分:0)

删除onBackPressed重写方法中的super.OnBackPressed()

如果不起作用,请尝试:

使用单击“恢复按钮”

的语法启动FireRoomActivity
Intent i = new Intent(getActivity(), FireRoomActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT)
startActivity(i);

答案 4 :(得分:0)

在“三项活动”中覆盖此内容

@Override
public void onBackPressed() {
    Intent intent=new Intent(this, MenuActivity.class);
    startActivity(intent);
}

有关推荐this链接

的详细信息