我想实现一个永不结束的 RecyclerView
。在第一项之前有最后一项,在滚动最后一项之后,显示第一项。
我怎样才能做到这一点?
我想要实现的是一个音乐播放器,可以显示当前歌曲、之前和之后的歌曲。
像这样:
(ps.有没有比使用recyclerview
更好的方法?)
最佳答案
我看到这样做的方法是将必须显示的项目数定义为 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);
这工作正常,但它完美吗?不,但足够接近;我认为没有人会滚动到足以看到缺陷。 (它会在极端处停止缠绕。)
关于android - RecyclerView 双向无限滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51482227/