Android RecyclerView滚动滚动项目

问题描述 投票:0回答:3

我的多视图类型RecyclerView Adapter的项目/单元格在滚动中变得混乱。我仔细研究了以下所有可能的解决方案,但没有一个起作用。

1。

@Override
public long getItemId(int position) {
   return mDataset.get(position).hashCode();
}

setHasStableIds(true);
  1. 增加了RecyclerView的缓存

[如果有任何解决方案,请分享。

java android android-recyclerview recycler-adapter
3个回答
0
投票

使RecyclerView ViewModel不可回收。我认为recyclerview默认设置为刷新,因此,将项目改组例如

class YourViewModel extends RecyclerView.ViewHolder {

    YourViewModel (@NonNull View view) {
       super(view);

       // Add the line below
       this.setIsRecyclable(false);

     }
}

此外,您可以在填充项目之前使用Collection.sort(items)实现一种排序方法,因此,即使视图被回收,这些项目仍保持排序状态(例如,按ID)。


0
投票

您可以尝试:

@Override
public long getItemId(int position) {
    return mDataset.get(position).hashCode().toLong(); // or .id.hashCode().toLong()
}

增加recyclerview的缓存的一种方法是:

recyclerView.setItemViewCacheSize(20)

您还可以借助LinearLayoutManager的方法calculateExtraLayoutSpace获得更多空间。我已经添加了指向文档的链接。

或者您可以使用:

setIsRecyclable(false);

但是它超出了使用RecyclerView的目的。


0
投票

您不应该使用hashCode()作为ID,因为它不能保证唯一!我的猜测是,您的许多商品都返回相同的哈希值。请尝试为每个项目实现唯一的ID,然后在getItemId()方法中使用它。

© www.soinside.com 2019 - 2024. All rights reserved.