如何通过childFragment为DialogFragment设置targetFragment

问题描述 投票:0回答:1

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

这是我的情况:我有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();

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

java android android-fragments parent-child android-dialogfragment
1个回答
0
投票

您可以尝试显示MyDialogFragment

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

基本上,当您设置targetFragment时将被选中MyDialogFragment,并且您的目标片段必须是相同的FragmentManager

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

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

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

((ChildFragment)getParentFragment()).sendResult(parameters)
© www.soinside.com 2019 - 2024. All rights reserved.