问题
在开发中,使用了ViewPager + FragmentPagerAdapter + 添加Fragment的方式,
在Fragment点击到其它页面又返回时,总是闪退报错,提示 已经有一个child被添加进来了,必须先RemoveView。
因为我在Fragment里使用了 lastView来保存之前的view, 所以会报这个错误。
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
if(lastView!=null){
binding = FragmentTabTextFragmemntBinding.inflate(inflater, container, false)
lastView = binding.root
}
return lastView
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
if(!isViewInited){
isViewInited = true
setInfo()
}
}
我原本想使用这种方式解决重新绘制Fragment的问题,没想到报 removeView 的错误。
而去掉 lastView
和 isViewInited
判断,页面上又会保留上一个view的数据,在滑动时可以看到有两层数据重叠了。
解决
想到的解决方案就是 用 lastView
判断上一个view是否为空,如果不为空,就removeView
, 把isViewInited
的判断去掉。这样就不会有数据重叠和报错了。
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
if(lastView!=null){
container?.removeAllViews()
}
binding = FragmentTabTextFragmemntBinding.inflate(inflater, container, false)
lastView = binding.root
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
setInfo()
}
问题
viewpager滑动时数据消失,界面变成空白
解决
// 有多少个页面就设为多少个
tabPager.offscreenPageLimit = fragments.size
问题
fragment内的fragment viewpager,
用 childFragmentManager