OnActivityResult不适用于activityGroup

时间:2013-05-04 07:47:14

标签: android activitygroup start-activity

我的App我使用TabHost。和ActivityGroup加载选项卡下的活动。在我的第二个标签上,我打开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");
            .................
                         ......
        }


    }

1 个答案:

答案 0 :(得分:2)

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

解决方案分为三个步骤。

首先,您必须让您的父活动,即您的ActiviyGroup类在您需要跳出当前活动的位置调用startActivityForResult函数。在您的孩子活动中,当您需要在正常活动中进行午餐时,请致电:

startActivityForResult(intent, 0);

你应该致电:

getParent().startActivityForResult(intent,0);

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

其次,在使当前活动的父类启动intent之后,您需要将onAcivityResult()函数添加到BOTH父类和当前子类中。在当前类中,您只需像现在一样编写正常的回调句柄消息。但是在父类中,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步中的状态,但我认为这是一种更好的方法。

希望这有帮助!