1

我的应用程序我使用 TabHost。和 ActivityGroup 加载选项卡下的活动。在我的第二个选项卡上,我打开活动组“TabGroupActivity”...并从这里打开一个子活动“childActivity2”。从“childActivity2”我想打开一个有主题对话框的正常活动。当我从正常活动中返回时,我想在我的 childActivity2 中运行 onActivityResult()。但是 ChildActivity2 中的 onActivityResult() 不起作用。

childActivity2 中启动正常活动的代码是

data.putInt("doctorId", doctor_id);
                Intent createSchedule = new Intent(ScheduleWeekly.this, CreateSchedule.class).putExtras(data);


                startActivityForResult(createSchedule, 1);

这是我的 onActivityResult()

 @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if(resultCode==Activity.RESULT_OK)
        {   Log.e("get","result");
            .................
                         ......
        }


    }
4

1 回答 1

2

你的问题和我的一样。问题是 onActivityResult 函数不会直接从活动组中的子活动触发,即使您的意图来自该子活动。

解决方案分为三个步骤。

首先,你要让你的父activity,也就是你的ActiviyGroup类在你需要跳出当前activity的位置调用startActivityForResult函数。在您的孩子活动中,当您需要在正常活动中吃午饭时,请致电:

startActivityForResult(intent, 0);

您应该致电:

getParent().startActivityForResult(intent,0);

这将让 ActivityGroup 处理回调。在您的情况下,由于您有三层嵌套,您可能必须尝试父母或祖父母是否应该处理回调并对 getParent() 部分进行适当的修改。

其次,在使当前活动的父类启动意图后,您需要将 onAcivityResult() 函数添加到父类和当前子类中。在当前课程中,您只需像现在一样编写正常的回调句柄消息。但在父类中,onActivityResult() 函数将捕获正常活动的回调并将意图传递给当前类。

第三,这一步是针对父 onActivityResult 类,在那个类中,你需要:

public void onActivityResult(int requestCode, int resultcode, Intent data)
{
    super.onActivityResult(requestCode, resultcode, data);
    switch (resultcode)
    {
    case RESULT_OK:
         MyChildActivity CA = (MyChildActivity) getLocalActivityManager().getCurrentActivity();
         CA.onActivityResult(requestCode, resultcode, data);
    } 
}

如您所见,父ActivityGroup类中的onActivityResult函数只是捕捉回调,获取您需要跳转到另一个活动的子活动,并将数据传输给它。您可能不需要将子活动中的 onActivityResult 函数作为第 2 步中的状态,但我认为这是一种更好的方法。

希望这有帮助!

于 2013-06-12T17:45:59.797 回答