我正在使用ViewPager
与GridView
和databinding
。
代码如下所示:
private fun initGridView(){
//page count
val totalPageSize = ceil(viewModel.rechargePaymentList.value!!.size.toFloat() / 6).toInt()
val viewPagerList = ArrayList<GridView>()
val layoutInflater = LayoutInflater.from(context)
//GridView
for (page in 0 until totalPageSize){
layoutInflater.inflate(R.layout.layout_gridview,binding.viewPager,false).apply {
val gridView = findViewById<GridView>(R.id.gridView)
gridView.adapter = GridViewAdapter(viewModel,context!!,page)
viewPagerList.add(gridView)
}
}
binding.viewPager.adapter = RechargeWayViewPagerAdapter(viewPagerList)
}
适配器如下所示
class RechargeWayViewPagerAdapter(private val viewList:ArrayList<GridView>): PagerAdapter() {
override fun instantiateItem(container: ViewGroup, position: Int): GridView {
container.addView(viewList[position])
return viewList[position]
}
override fun isViewFromObject(view: View, any: Any): Boolean {
return view == any as GridView
}
override fun getCount(): Int {
return viewList.size
}
override fun destroyItem(container: ViewGroup, position: Int, any: Any) {
container.removeView(viewList[position])
}
}
但它显示
IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first
我在override fun instantiateItem
中尝试过container.removeView(viewList[position])
.
但它似乎不起作用。
我错过了什么吗? 提前谢谢。
从问题来看,您的孩子视图已经有父母,因此请执行以下操作。
假设container.addView(viewList[position])
行是罪魁祸首,那么儿童视图将被View childView = viewList[position]
if (childView != null) {
ViewGroup parent = (ViewGroup) childView.getParent();
if (parent != null) {
parent.removeView(childView);
}
}