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

UI变更时PreferenceFragment显示空白及回退栈异常问题求助

问题原因
  • 嵌套Fragment管理器使用错误:你在MyProfileFragment中添加子PreferenceFragment时,调用了Activity级别的requireActivity().getSupportFragmentManager()。按照Android规范,嵌套在Fragment内部的子Fragment必须使用父Fragment的getChildFragmentManager()进行管理,否则配置变更(横竖屏切换)触发页面重建时,系统无法将恢复的子Fragment和父Fragment新创建的FrameLayout容器绑定,就会出现容器空白的问题。
  • 回退栈归属错误:所有从MainSettingsPreference跳转的子PreferenceFragment,默认会使用启动时的Fragment管理器的回退栈,你当前用了Activity的Fragment管理器,所有回退记录都存储在Activity的回退栈中。每次配置变更Activity重建时,系统会自动恢复Activity回退栈的内容,就会出现你描述的「回退栈依次弹出」的异常表现。
解决方案

修改MyProfileFragment中onViewCreated的代码,将Activity的FragmentManager替换为父Fragment的getChildFragmentManager():

// MyProfileFragment 修正后代码
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);

    if (savedInstanceState == null) {
        // 嵌套子Fragment使用getChildFragmentManager管理
        getChildFragmentManager().beginTransaction()
            .replace(R.id.mpf_frame_fl, new MainSettingsPreference())
            .commit();
    }
}

补充说明

如果你使用app:fragment属性配置自动跳转逻辑,需要确保跳转时的Fragment事务也使用getChildFragmentManager,可以重写PreferenceFragmentCompat的导航回调来实现,避免后续跳转的Fragment仍然使用Activity的Fragment管理器导致异常。

内容的提问来源于stack exchange,提问作者User

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 03:54:00