RecyclerView双向无限滚动

时间:2018-07-23 15:19:21

标签: android android-recyclerview

我想实现一个永远不会完成的RecyclerView。在第一个项目之前有最后一个项目,在滚动了最后一个项目之后,显示了第一个项目。 我怎样才能做到这一点? 我试图实现的是一种音乐播放器,它可以显示当前歌曲,之前和之后的歌曲。 像这样: enter image description here

(ps。有没有比使用recyclerview更好的方法了?)

1 个答案:

答案 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);

这行得通,但是完美吗?不,但足够接近;我认为没有人会滚动查看缺陷。 (它将停止在极端情况下自动换行。)