我被困在一个场景中,我必须做一个无限滚动回收视图(在我的情况下,上下两个方向)我有一些静态数据(列表中的5-8个项目),没有分页,一次只有一个项目显示在屏幕上,就像一个垂直视图寻呼机。任何帮助/建议都很感激。谢谢你提前:)
b09cbbtk1#
我自己找到了解决办法把答案贴出来,这样可以帮助别人不浪费时间要在两个方向上创建无限的recyclerview,请在适配器和Activity中进行以下更改:在Adapter中:通过修改getItemsCount方法来欺骗RV
override fun getItemCount() = yourList?.let { if (it.size > 1) Int.MAX_VALUE else it.size } ?: 0
修改绑定方法以获得正确的位置
override fun onBindViewHolder(holder: ViewHolder, position: Int) { holder.bind(yourList?.let { if (it.size != 0) position % it.size else 0 } ?: 0) }
设置适配器后,滚动到项目的中间(因为现在您的列表是Int.Max_value的大小-实际上不用担心,这是一个回收视图):
binding.yourRV.scrollToPosition(Int.MAX_VALUE / 2)
要移动到第一个位置:
binding.yourRV.scrollToPosition( (Int.MAX_VALUE / 2) - (Int.MAX_VALUE / 2) % yourList.size )
要移动到任何特定或上次保存的位置:
val firstPos = (Int.MAX_VALUE / 2) - (Int.MAX_VALUE / 2) % yourList.size binding.yourRV.scrollToPosition( firstPos + indexYouWishToMoveTo)
1条答案
按热度按时间b09cbbtk1#
我自己找到了解决办法把答案贴出来,这样可以帮助别人不浪费时间
要在两个方向上创建无限的recyclerview,请在适配器和Activity中进行以下更改:
在Adapter中:通过修改getItemsCount方法来欺骗RV
修改绑定方法以获得正确的位置
设置适配器后,滚动到项目的中间(因为现在您的列表是Int.Max_value的大小-实际上不用担心,这是一个回收视图):
要移动到第一个位置:
要移动到任何特定或上次保存的位置: