我想实现一个永远不会完成的RecyclerView
。在第一个项目之前有最后一个项目,在滚动了最后一个项目之后,显示了第一个项目。
我怎样才能做到这一点?
我试图实现的是一种音乐播放器,它可以显示当前歌曲,之前和之后的歌曲。
像这样:
(ps。有没有比使用recyclerview
更好的方法了?)
答案 0 :(得分:2)
我看到的完成方式是定义必须显示为Integer.MAX_VALUE
的项目数。在适配器的onBindViewHolder()
中,您将看到类似以下内容的
@Override
public int getItemCount() {
return (mItems == null) ? 0 : Integer.MAX_VALUE;
}
现在您实际上无法显示Integer.MAX_VALUE
项,因此这只是RecyclerView
的一个小谎言。在您的代码中,将索引值从0 ... Integer.MAX_VALUE-1映射到0 ... your_item_count-1,就像在onBindViewHolder()
中那样:
int realPos = position % mItems.size();
使用realPos
代替RecyclerView
进入的位置。
剩下的就是将RecyclerView
滚动到范围的中间:
mRecycler.scrollToPosition(Integer.MAX_VALUE / 2);
这行得通,但是完美吗?不,但足够接近;我认为没有人会滚动查看缺陷。 (它将停止在极端情况下自动换行。)