getFragmentManager():Activity 管理嵌入的 Fragment
getChildFragmentManager():Fragment 管理嵌套的 Fragment
错误原因分析
在 Android 开发中,如果 Fragment 管理器使用不当,会导致类似 java.lang.IllegalArgumentException:No view found for id 的异常,特别是在应用进入后台或锁屏后恢复时。
API 文档对两种管理器有明确说明,总结如下:
-
Activity 容器:如果 Fragment 在 replace 新的 Fragment 时,容器使用的是 Activity 布局中的某个部分或整体作为容器,则使用 getFragmentManager()。即:getFragmentManager() 获取的是 Activity 对所包含 Fragment 的管理器。
-
Fragment 容器:如果 Fragment 在 replace 新的 Fragment 时,容器使用的是此 Fragment 的布局文件中某个整体或部分 View 作为容器,则使用 getChildFragmentManager()。即:Fragment 嵌套 Fragment,需要利用 getChildFragmentManager()。
正确选择 Fragment 管理器是避免视图生命周期不一致导致崩溃的关键。


