RecyclerView 双向无限滚动

App*_*tic 3 android android-recyclerview

我想实现一个RecyclerView永远不会完成的。在第一个项目之前是最后一个项目,在滚动最后一个项目之后,显示第一个项目。我怎样才能做到这一点?我试图实现的是一个音乐播放器,显示当前歌曲,之前和之后的歌曲。像这样: 在此处输入图片说明

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

Che*_*amp 5

我看到这样做的方法是定义您必须显示为Integer.MAX_VALUE. 在onBindViewHolder()适配器中,您将拥有以下内容:

@Override
public int getItemCount() {
    return (mItems == null) ? 0 : Integer.MAX_VALUE;
}
Run Code Online (Sandbox Code Playgroud)

现在您不能真正拥有Integer.MAX_VALUE要显示的项目,所以这是对RecyclerView. 在您的代码中,将索引值从 0...Integer.MAX_VALUE-1 映射到 0...your_item_count-1,如下所示onBindViewHolder()

int realPos = position % mItems.size();
Run Code Online (Sandbox Code Playgroud)

使用realPos代替RecyclerView传入的位置。

剩下的就是将 滚动RecyclerView到范围的中间:

mRecycler.scrollToPosition(Integer.MAX_VALUE / 2);
Run Code Online (Sandbox Code Playgroud)

这工作正常,但它完美吗?不,但足够接近;我认为没有人会滚动到足以看到缺陷的程度。(它会在极端情况下停止换行。)

  • @Apptic 我只是随机定位。至于性能问题,您并没有真正保留这么大的数组,而 `RecyclerView` 只是维护了一小部分视图持有者,所以,不,我认为不会影响性能。 (2认同)