如何从子活动完成父活动

Posted

技术标签:

【中文标题】如何从子活动完成父活动【英文标题】:How to finish parent activity from child activity 【发布时间】:2012-03-28 16:15:59 【问题描述】:

我是 android 开发新手。

我创建了一个主 Activity (->A),它有 4 个按钮。 4 个按钮之一是 EXIT 按钮。

我开始另一个活动 (->B),点击 EXIT 按钮。这将通过来自“A”Activity 的意图打开“B”Activity。

活动“B”包含 - 您要退出吗?是按钮和否按钮。

如果我给出finish(),点击按钮- 它退出'B'Activity。我想完成“B”和“A”。

我什至尝试过 A.finish() -> 这无法被识别并导致语法/语义错误。

我会很感激这里的帮助。

P.S : 我使用的是Android-2.2 版本的手机,我不喜欢使用ActivityManager 来解决这个问题。

【问题讨论】:

【参考方案1】:

尝试使用

启动子活动
 startActivityForResult(intent, REQUEST_EXIT);

在子活动中

case R.id.quit:
     setResult(RESULT_OK, null);
     finish();

在父活动中

 @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) 

    if (requestCode == REQUEST_EXIT) 
         if (resultCode == RESULT_OK) 
            this.finish();

         
     

【讨论】:

如果父活动没有出现,这是否有效。我的意思是我有一个按钮可以开始另一个活动。在此按钮上单击我也不会完成当前活动及其父项 只要子Activity是在父Activity中使用startActivityForResult启动的,并且onActivityResult是在父Activity中定义的,这个方法就会起作用。【参考方案2】:

Activity A 中使用 startActivityForResult() 来启动 Activity B,在 A 中使用 onActivityResult() 只是在 finish() Activity A 中。在 Activity B 中按下按钮只是 finish() Activity B。

【讨论】:

感谢 Georgy 的解释 - 我已将他的代码部分用于我的代码部分。【参考方案3】:

您可以从子活动中完成父活动,例如...

在父母中....

 startActivityForResult(new Intent(Parent.this, Child.class), ACTIVITY_CONSTANT);

并覆盖 Parent 中的 OnActivityForResult(...) 方法。

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) 
    // TODO Auto-generated method stub
    super.onActivityResult(requestCode, resultCode, data);
    if(requestCode == ACTIVITY_CONSTANT)
    
        finish();
    

当您在子活动上调用 finish() 时,它也会结束父活动。

【讨论】:

以上是关于如何从子活动完成父活动的主要内容,如果未能解决你的问题,请参考以下文章

Android:setResult 未将结果返回给父 Activity

如何在父进程被杀死/完成时保持子进程处于活动状态(在 Windows 中)

从通知中导航到父活动

将活动发送到后台而不完成

尝试将数据从子活动返回到 MainActivity 时获取 NullPointerException

完成活动前开始的所有活动