这几天写的项目里 使用了FragmentTabHost 加Fragment 嵌套viewpager的模式
在运行项目的时候 点击tab切换到装有viewpager的那一栏时,报错
FragmentManager is already executing transactions
查看代码
在装有viewpager的那个fragment里 这行代码出了问题
manager = getFragmentManager();
我尝试把它改为
manager = getChildFragmentManager();
再运行发现不报错了
于是查了一下 getFragmentManager和getChildFragmentManager的区别
childFragmentManager 返回的是一个 在某一fragment里 单独管理该碎片里嵌套的其他碎片的 私有的manager 它负责该碎片内其他碎片的Transcation事务
FragmentManager 拿到的是一个用来管理那些和某activity直接相关联的碎片的 碎片管理器
在MainActivity初始化FragmentTabHost的时候,传入了一个fragmentmanager,就是getFragmentManager拿到的,因为tabhost要交互的是第一层的fragment ,是直接和activity相交互的
而在Fragment1里嵌套的viewpager ,因为要交互的是嵌套的Fragment,所以需要拿到ChildFragmentManager才行。