如何从Activity3完成()MainActivity

时间:2013-04-24 19:02:07

标签: android android-intent android-theme activity-finish

我正在开发一个我有一个MainActivity的应用程序,我有一个调用Activity1的按钮(此活动的主题设置为对话框,即android:theme="@android:style/Theme.Holo.Light.Dialog) ,所以我无法完成MainActivity,否则Activity1将位于主屏幕的顶部。

在我的Activity1上,我的其他活动即Activity2被调用。这与具有对话框主题的Activity1相同。现在从Activity2我调用了Activity3,这是没有对话框主题的正常活动。

现在,我想从MainActivity完成Activity2

我怎样才能做到这一点?

任何形式的帮助都将受到赞赏。

6 个答案:

答案 0 :(得分:4)

您可以启动startActivityForResult()等每项活动并查看活动结果。 因此,如果要关闭第一个活动,则应设置每个活动的特定结果并调用finish()。在每项活动中,您都会检查result中的onActivityResult(),因此,如果您看到指定的结果,则应关闭此活动(如果不是第一次活动,则设置结果)

在第一项活动中,我想开始第二次

Intent i = new Intent(Activity1.this, Activity2.class);
startActivityForResult(i, 0);

在第二项活动中,我想开始第三次

Intent i = new Intent(Activity2.this, Activity3.class);
startActivityForResult(i, 0);

所以,在第三项活动中,我想开始第四次并且彼此关闭

Intent i = new Intent(Activity3.this, Activity4.class);
startActivity(i);

setResult(RESULT_OK);
finish();

在每项活动(1,2)中,我应该检查方法onActivityResult()

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (resultCode == RESULT_OK) {
        setResult(RESULT_OK);
        finish();
    }
}

答案 1 :(得分:1)

要关闭Activity2,Activity1,然后关闭MainActivity吗?

如果是这样,您可以对每个活动使用startActivityForResult和onActivityResult,并检查返回的结果是否是请求关闭当前活动并将其进一步传递的结果。

如果没有,可以使用将在活动之间绑定的服务来完成这样的事情。

答案 2 :(得分:0)

根据我的理解,您希望在MainActivity启动时完成Activity 3。如果是这种情况,也可以清除其他两个Activities,那么我们可以Intent flag

Intent intent (Activity2.this, Acitivity3.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

如果我理解正确,这将完成你想要的。 Activity 3时启动。

Docs

答案 3 :(得分:0)

我认为它不是一个工作流程android系统会发生这就是为什么你不能用一个命令关闭整个应用程序。你可以做的是使用startActivityForResult并检查源,状态并以级联方式关闭活动。

以下是一个例子: How to manage `startActivityForResult` on Android?

您可以为开始下一个活动的每个活动创建特定代码。

答案 4 :(得分:0)

在开始活动时,将您的活动作为额外活动发送给新活动。例如:

在main中:

  Intent in= new Intent("your action");
  in.putExtra("preAct",this);
  startActivity(in);

然后使用您的preAct完成它。

在新活动中:

 Activity prev = (Activity)this.getIntent().getSerializableExtra("preAct");

然后你需要的一切

 prev.finish()

随时随地完成

答案 5 :(得分:0)

检查活动的noHistory属性。 如果您将其设置为true,则用户在离开后将无法返回此活动。