在另一个片段内的片段中不调用OnActivityResult

时间:2014-05-22 22:49:35

标签: android android-fragments android-activity android-nested-fragment

我有两个名称为F1和F2的片段以及一个名为A的活动。 我使用类似这样的内容在Framelayout内部活动A中添加了片段F1:

F1 fragment = new F1();
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.main_drawer_frame, F1, LEFT_DRAWER_FRAGMENT);
transaction.commit();

然后在片段F1中,我在另一个布局中添加片段F2:

F2 fragment = new F2();
fragment.setTargetFragment(this, 0); //"this" refer to an instance of F1
FragmentTransaction transacton = getChildFragmentManager().beginTransaction();
transacton.replace(R.id.drawer_host_frame, fragment, CURRENT_FRAGMENT);
transacton.commit();

然后我使用startActivityForResult()

从F2开始一个活动
startActivityForResult(getActivity(), intent, REQUEST_ACCOUNT);

然后我在片段F2中覆盖onActivityResult()。但问题是onActivityResult()永远不会被调用。然后我发现片段F1内的super.onActivityResult()不会在片段F2内触发onActivtyResult()

我可以手动检索getChildFragmentManager()中的每个Fragment,然后在它们上面调用onActivityResult(),但它的笨拙,就像我刚刚解决了真正的问题一样。

2 个答案:

答案 0 :(得分:3)

正如我所说,一种方法是在片段F1中使用这样的东西:

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    //Here catch every requestCode for parentFragment
    super.onActivityResult(requestCode, resultCode, data);
    for (Fragment fragment : getChildFragmentManager().getFragments())
       if (fragment != null)
           fragment.onActivityResult(requestCode, resultCode, data);
}

答案 1 :(得分:0)

父片段F1将收到onActivityResult,而F2则不会。 F1可以找到F2片段然后调用它的方法来完成任务。