我有两个名称为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()
:
startActivityForResult(getActivity(), intent, REQUEST_ACCOUNT);
然后我在片段F2中覆盖onActivityResult()
。但问题是onActivityResult()永远不会被调用。然后我发现片段F1内的super.onActivityResult()
不会在片段F2内触发onActivtyResult()
。
我可以手动检索getChildFragmentManager()中的每个Fragment,然后在它们上面调用onActivityResult()
,但它的笨拙,就像我刚刚解决了真正的问题一样。
答案 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片段然后调用它的方法来完成任务。