Java 如何从childFragment为DialogFragment设置targetFragment

Java 如何从childFragment为DialogFragment设置targetFragment,java,android,android-fragments,parent-child,android-dialogfragment,Java,Android,Android Fragments,Parent Child,Android Dialogfragment,我发布这个问题,因为我在这里没有找到任何方便的答案或类似的问题 下面是我的场景:我有一个MainActivity,它有一个tabParentFragment,它本身有一个childFragment MainActivity ------ TabParentFragment ------------- ChildFragment 在childFragment中,我尝试调用DialogFragment并设置其targetFragment,但出现错误: Fragment MyDialogFrag

我发布这个问题,因为我在这里没有找到任何方便的答案或类似的问题

下面是我的场景:我有一个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

基本上,当您设置TargetFragment时,将检查MyDialogFragment,并且您的目标片段必须是相同的FragmentManager

在本例中,我建议您通过ChildFragment的getChildFragmentManager显示MyDialogFragment。无需使用setTargetFragment代替调用targetFragment.onActivityResult您可以直接通过MyDialogFragment中的parentFragment调用

在可以调用的MyDialogFragment中的ChildFragment内声明方法sendResultparameters

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

如果我设置这个TabsPagerAdapter adapter=new TabsPagerAdaptergetChildFragmentManager;to TabsPagerAdapter adapter=new TabsPagerAdaptergetFragmentManager;它不起作用,因为它是MyDialogFragment mdialog=new MyDialogFragment;mdialog.setTargetFragmentChildFragment.this,91;mdialog.showgetParentFragment.getChildFragmentManager,MYDFTAG;当链接到onActivityResult以获得结果时,这个方法做得很好。非常感谢。
MyDialogFragment mdialog = new MyDialogFragment();
mdialog.show(getChildFragmentManager(), "MYDFTAG");
((ChildFragment)getParentFragment()).sendResult(parameters)