【问题标题】:RecyclerView.ViewHolder's setIsRecyclable() funcRecyclerView.ViewHolder 的 setIsRecyclable() 函数
【发布时间】: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)?谢谢。

【问题讨论】:

    标签: android android-recyclerview android-widget android-viewholder


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

        @Override
        public int getItemType(int position){
            return position
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-01-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-07-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多