You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ViewPager2嵌套Fragment问题:Android应用被系统杀死后恢复时崩溃

具体修复步骤

第一步:替换为正确的FragmentManager + 加入恢复判断

修改MyPageFragment的代码,换成getChildFragmentManager(),同时加上savedInstanceState判断避免重复创建:

@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    // 只有首次创建时才添加子Fragment,恢复时系统会自动重建
    if (savedInstanceState == null) {
        Fragment listFragment = SubFragment.newInstance();
        getChildFragmentManager().beginTransaction()
                .replace(R.id.structure_placeholder, listFragment)
                .commit();
    }
}

第二步:把代码移到更合适的生命周期方法

我推荐把添加子Fragment的代码从onStart()移到onViewCreated(),这个方法是在Fragment的视图完全创建好之后才会调用的,在这里处理视图相关的Fragment事务更安全,能彻底避免“视图未就绪”的问题。


为什么这样能解决问题?

  • getChildFragmentManager()会让子Fragment的状态完全依附于父Fragment,系统恢复时会先重建父Fragment的视图,再重建子Fragment,这时候structure_placeholder已经存在,不会出现找不到视图的错误。
  • savedInstanceState == null的判断,能避免在应用恢复时重复创建子Fragment——因为系统已经会帮你恢复之前保存的SubFragment实例,不需要你手动再创建一次。
  • onViewCreated()是Fragment视图初始化完成后的回调,是处理内部视图和子Fragment的最佳时机。

内容的提问来源于stack exchange,提问作者Laurent D.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.01 02:37:28