如何从childFragment设置DialogFragment的targetFragment

noah_abou:

我在发布此问题,因为我在这里找不到任何方便的答案或类似问题。

这是我的情况:我有MainActivity,它的tabParentFragment本身具有childFragment

MainActivity
------ TabParentFragment 
-------------  ChildFragment

我尝试从childFragment调用DialogFragment并设置其targetFragment,但出现错误:

Fragment MyDialogFragment {481d668 ...} declared target fragment ChildFragment{70c2a81 #0 id=0x7f0900de android:switcher:2131296478:0} that does not belong to this FragmentManager!

这是我在ChildFragment中如何调用MyDialogFragment的方法:

MyDialogFragment mdialog = new MyDialogFragment();
mdialog.setTargetFragment(ChildFragment.this, 91);
mdialog.show(getActivity().getSupportFragmentManager(), "MYDFTAG");

这是我从TabParentFragment调用ChildFragment的方式:

TabsPagerAdapter adapter = new TabsPagerAdapter(getChildFragmentManager());
ChildFragment = new ChildFragment ();
adapter.addFragment(childFragment, "The Child");
viewPager.setAdapter(adapter);
....

这是我从MainActivity调用TabParentFragment的方法:

getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
new TabParentFragment()).commit();

我花了数小时试图找出问题所在,但似乎没有使它起作用。你能帮我吗 ?

丛海:

您可以尝试显示 MyDialogFragment

MyDialogFragment mdialog = new MyDialogFragment();
mdialog.setTargetFragment(ChildFragment.this, 91);
mdialog.show(getParentFragment().getChildFragmentManager(), "MYDFTAG");

基本上,当您设置setTargetFragment时,将对其进行检查,MyDialogFragment并且您的目标片段必须与FragmentManager相同

在这种情况下,我建议你看MyDialogFragment通过getChildFragmentManagerChildFragment无需setTargetFragment通话,targetFragment.onActivityResult您可以直接在parentFragment内部拨打电话MyDialogFragment

MyDialogFragment mdialog = new MyDialogFragment();
mdialog.show(getChildFragmentManager(), "MYDFTAG");

sendResult(parameters)内部声明方法ChildFragmentMyDialogFragment可以调用

((ChildFragment)getParentFragment()).sendResult(parameters)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章