当前位置: 代码迷 >> 综合 >> 解决 使用FragmentTabHost 和 viewpager时编译器报错 FragmentManager is already executing transactions
  详细解决方案

解决 使用FragmentTabHost 和 viewpager时编译器报错 FragmentManager is already executing transactions

热度:22   发布时间:2023-12-12 22:50:01.0

这几天写的项目里  使用了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才行。



  相关解决方案