Java 如何在Android RecyclerView中循环浏览项目?
如何在Android RecyclerView中循环浏览项目 我想要一个水平滚动的RecyclerView。当到达右端时,它只是通过重新启动项目列表继续滚动。左边也一样Java 如何在Android RecyclerView中循环浏览项目?,java,android,android-recyclerview,Java,Android,Android Recyclerview,如何在Android RecyclerView中循环浏览项目 我想要一个水平滚动的RecyclerView。当到达右端时,它只是通过重新启动项目列表继续滚动。左边也一样 例如: 项目列表:0,1,2,3,4,5,6,7,8,9 起始视图显示:0,1,2,3,4,5,6,7 向右滚动5项后:5,6,7,8,9,0,1,2 在向左滚动两个项目后:8,9,0,1,2,3,4,5 首次创建新列表=原始列表的3倍 original list: 0,1,2,3,4,5,6,7,8,9 new list
例如:
项目列表:0,1,2,3,4,5,6,7,8,9
起始视图显示:0,1,2,3,4,5,6,7
向右滚动5项后:5,6,7,8,9,0,1,2
在向左滚动两个项目后:8,9,0,1,2,3,4,5 首次创建新列表=原始列表的3倍
original list: 0,1,2,3,4,5,6,7,8,9
new list : 0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9
首次显示RecyclerView
时,应将RecyclerView
滚动至右侧10个项目(10是原始列表的大小)。然后,如果用户向左或向右滚动少于10个项目,它将像一个圆圈一样工作
和当它们到达右侧或左侧的末尾时,您应该滚动RecyclerView
回到第一次显示RecyclerView
的状态。
如果我错了,请纠正我。感谢您的帮助另一个想法是,使适配器的
getItemCount()
返回Integer.MAX\u值
,然后为了获取项目,您可以调用itemsList.get(位置%list.size)
这样,当滚动超出实际列表大小时,它将从0重新启动,并在最后一个元素之后显示列表的第一个元素。
还有一件事可以做,就是在
LayoutManager
上调用scrollToPosition(int x)
,其中x%yourList.size()==0
,x接近Integer.MAX_VALUE/2
,这样滚动看起来就像是无限的(从起点开始,每个方向上大约有10亿个位置)
正如注释中指出的,如果列表大小为0,则getItemCount应返回0。例如
return list.size == 0 ? 0 : Integer.MAX_VALUE
我认为如果我们向右滚动它会很好,但是当我们向左滚动时,如何计算?我描述的方法是从0索引开始,所以你不能向左滚动,你可以做的一件事是调用
scrollToPosition(int x)
在LayoutManager
上,其中x%yourList.size()==0
并且x接近Integer.MAX_VALUE/2
这样,滚动条看起来就像是无限的(从起点开始的每个方向上大约10亿个位置),这正是我想要的,它工作得非常完美。谢谢我确实是这样做的,但在“itemsList.get(position%list.size)”这一行,我得到了被零除的错误。更改getItemCount以返回Integer.MAX_值时;似乎list.size()始终返回0您应该修改getItemCount
,以便如果列表为空,它将返回0像往常一样扩展RecyclerView
,覆盖检索下一个/上一个元素并在达到限制时将索引更新为零/最大值的必要方法…..感谢您的建议,但我会按照勒洛曼的建议去做。它不需要存储太多数据。