嵌套Fragment二次打开出现空白页问题求助
解决嵌套Fragment中ViewPager第二次打开无内容的问题
嘿,我一眼就看出问题所在了——这是嵌套Fragment场景下ViewPager很容易踩的坑!
问题根源
你的MirandaFragment本身就是一个Fragment,而它里面的ViewPager要展示的EngMiranda、SpaMiranda是它的子Fragment。你现在用的getFragmentManager()是获取Activity级别的Fragment管理器,第一次打开时还能正常工作,但第二次打开MirandaFragment时,Activity的Fragment栈里可能还残留着之前的子Fragment实例,导致新的ViewPager无法正确关联和加载内容,就出现了空白。
修复方案
只需要把初始化适配器时的getFragmentManager()换成getChildFragmentManager()就行!这个方法是Fragment专门用来管理自己内部子Fragment的,能精准维护嵌套Fragment的生命周期和状态,完美解决二次加载的问题。
修改后的MirandaFragment代码:
class MirandaFragment extends Fragment { protected View view; FragmentPagerAdapter adapterViewPager; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment view = inflater.inflate(R.layout.miranda, container, false); ViewPager vpPager = (ViewPager) view.findViewById(R.id.vpPager); // 核心修改:用getChildFragmentManager()替代getFragmentManager() adapterViewPager = new MyPageAdapter(getChildFragmentManager()); vpPager.setAdapter(adapterViewPager); return view; } }
额外小建议
如果你的项目已经升级到AndroidX,强烈推荐换成ViewPager2搭配FragmentStateAdapter,它对嵌套Fragment的支持更完善,还修复了旧ViewPager的不少兼容性问题,用起来更省心~
内容的提问来源于stack exchange,提问作者lakshman kumar
相关产品推荐
相关产品推荐

