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”读取