我的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");
.................
......
}
}
答案 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步中的状态,但我认为这是一种更好的方法。
希望这有帮助!