由于我在这里找不到任何方便的答案或类似问题,因此我发布了这个问题。
这是我的情况:我有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
在这种情况下,我建议您以MyDialogFragment
的getChildFragmentManager
显示ChildFragment
。不需要setTargetFragment
而不是调用targetFragment.onActivityResult
,您可以通过parentFragment
内的MyDialogFragment
直接调用
MyDialogFragment mdialog = new MyDialogFragment(); mdialog.show(getChildFragmentManager(), "MYDFTAG");
在
sendResult(parameters)
中声明方法ChildFragment
,在MyDialogFragment
中可以调用
((ChildFragment)getParentFragment()).sendResult(parameters)