RecyclerView.ViewHolder 的 setIsRecyclable() 函数

Posted

技术标签:

【中文标题】RecyclerView.ViewHolder 的 setIsRecyclable() 函数【英文标题】:RecyclerView.ViewHolder's setIsRecyclable() func 【发布时间】:2022-01-02 13:15:24 【问题描述】:

我想将我的视图持有者设置为不回收,代码如下:

@Override
public void onBindViewHolder(final ViewHolder viewHolder, final int position) 
    viewHolder.setIsRecyclable(false);

但是,当我在这里看到文档时:https://developer.android.com/reference/androidx/recyclerview/widget/RecyclerView.ViewHolder#setIsRecyclable(boolean),它写道 setIsRecycleable() 应该始终配对,我对此一无所知。任何人都可以为这种情况提供示例代码吗?我什么时候应该再次调用 setIsRecyclable(true)?谢谢。

【问题讨论】:

【参考方案1】:

不回收ViewHolder只是意味着当有新数据要绑定时,特定的ViewHolder将被保留而不被覆盖,问题是Adapter将需要提供另一个ViewHolder来制作为它不能重复使用的那个。

这就是为什么你最终需要让它回收,即setIsRecycleable(true),因为如果它最终不得不创建新的视图来表示数据,它有点违背RecyclerView的观点。

您可能想要关闭回收的一个原因是为了避免中断,也许ViewHolder 正在播放动画或加载视频。完成后,您可以打开回收,释放ViewHolder 以确保它可以再次使用。

【讨论】:

【参考方案2】:

在这种情况下最好使用 Listview。 recyclerview 的全部含义是回收视图。 别的看这个帖子 https://***.com/a/36275862/3094367

【讨论】:

【参考方案3】:

其实recycle跟viewType有关。 您只需更改每个 itemType 都是唯一的 喜欢:

@Override
public int getItemType(int position)
    return position

【讨论】:

以上是关于RecyclerView.ViewHolder 的 setIsRecyclable() 函数的主要内容,如果未能解决你的问题,请参考以下文章

Recyclerview ViewHolder中的TextView - OnClickListener

RecyclerView.ViewHolder 是不是总是必须是内部类?

在“ListAdapter”或“RecyclerView.ViewHolder”做繁重的工作?

尝试从空对象引用上的字段“android.view.View androidx.recyclerview.widget.RecyclerView$ViewHolder.itemView”读取

NestedScrollView内部的RecyclerView ViewHolder创建

RecyclerView ViewHolder 的新活动卡在黑屏上