如何从子片段为 DialogFragment 设置目标片段

How to set targetFragment for a DialogFragment from a childFragment

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

这是我的场景:我的 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");

基本上,当您设置 TargetFragment 时,它会检查 MyDialogFragment 并且您的目标片段必须与 FragmentManager

相同

在这种情况下,我建议您通过 ChildFragmentgetChildFragmentManager 显示 MyDialogFragment。不需要 setTargetFragment 而不是调用 targetFragment.onActivityResult 你可以直接在 MyDialogFragment

中调用 parentFragment
MyDialogFragment mdialog = new MyDialogFragment();
mdialog.show(getChildFragmentManager(), "MYDFTAG");

ChildFragment中声明方法sendResult(parameters),在MyDialogFragment中你可以调用

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