我的多视图类型RecyclerView Adapter的项目/单元格在滚动中变得混乱。我仔细研究了以下所有可能的解决方案,但没有一个起作用。
1。
@Override
public long getItemId(int position) {
return mDataset.get(position).hashCode();
}
setHasStableIds(true);
[如果有任何解决方案,请分享。
使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)。
您可以尝试:
@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的目的。
您不应该使用hashCode()
作为ID,因为它不能保证唯一!我的猜测是,您的许多商品都返回相同的哈希值。请尝试为每个项目实现唯一的ID,然后在getItemId()
方法中使用它。