在onCreate方法的MainActivity中,我将()MainFragment添加到FrameLayout main_view_container:
if (savedInstanceState == null) {
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragmentTransaction.add(R.id.main_view_container, new MainFragment(), MainFragment.FRAGMENT_TAG);
fragmentTransaction.commit();
}
在我的MainFragment中,我有ViewPager和FragmentStatePagerAdapter,每个页面都是Fragment本身(PagerFragment)。
然后在按钮点击后的某个时刻我想用另一个片段(ReplacementFragment)替换整个MainFragment并将事务添加到后面的堆栈,这样我就可以在按下的后退按钮上返回MainFragment。所以我做了以下几点:
FragmentTransaction fragmentTransaction = getActivity().getSupportFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.main_view_container, new ReplacementFragment(), null);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
提交事务后,MainFragment停止并且onDestroyView()被调用,但是PagerFragments(在MainFragment中的ViewPager中)完全没有任何反应。不是单个onStop()调用的事件。然后当我回去时,MainFragment的View在onCreateView()中重新创建,这意味着ViewPager的新实例,但是仍然没有与PagerFragments一起。
如何调用父片段onDestroyView而不是子片段?
答案 0 :(得分:22)
在MainFragment中创建寻呼机适配器时,必须使用getChildFragmentManager()。