ViewPager中的碎片不会被销毁

时间:2014-10-24 18:15:26

标签: android android-fragments android-viewpager

在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而不是子片段?

1 个答案:

答案 0 :(得分:22)

在MainFragment中创建寻呼机适配器时,必须使用getChildFragmentManager()。