Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/213.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在Android RecyclerView中循环浏览项目?_Java_Android_Android Recyclerview - Fatal编程技术网

Java 如何在Android 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

如何在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,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
,覆盖检索下一个/上一个元素并在达到限制时将索引更新为零/最大值的必要方法…..感谢您的建议,但我会按照勒洛曼的建议去做。它不需要存储太多数据。