RecyclerView.ViewHolder的setIsRecyclable配对规则及调用时机示例咨询
RecyclerView.ViewHolder setIsRecyclable 用法说明
成对调用的原因
setIsRecyclable(false)的作用是告知RecyclerView,当前ViewHolder正在被使用,不能回收给其他条目复用。如果仅调用false不配对调用true,该ViewHolder会被永久标记为不可复用,不仅会让RecyclerView失去复用特性,导致列表滑动时持续创建新ViewHolder引发卡顿,还会造成严重的内存泄漏问题。
调用setIsRecyclable(true)的时机
当你确定当前ViewHolder不再被对应条目占用时,就可以调用setIsRecyclable(true)重置标记,最稳妥的通用调用位置是onViewRecycled回调,该回调会在系统准备将ViewHolder放入复用池之前触发。
如果是因为ViewHolder内有正在执行的动画、异步请求才禁用回收,也可以在动画结束、异步请求完成的回调中提前调用setIsRecyclable(true),不需要等到回收触发,能提前释放复用权限提升列表性能。
示例代码
public class CustomAdapter extends RecyclerView.Adapter<CustomAdapter.CustomViewHolder> { // 列表数据、构造方法等其他逻辑省略 private List<DataModel> dataList; @Override public void onBindViewHolder(@NonNull CustomViewHolder holder, int position) { // 先完成视图绑定逻辑 DataModel currentData = dataList.get(position); holder.titleText.setText(currentData.getTitle()); // 其他绑定逻辑... // 标记当前ViewHolder不可回收 holder.setIsRecyclable(false); // 示例:如果是因为动画才禁用回收,动画结束后提前重置标记 holder.animView.animate() .alpha(1f) .setDuration(1000) .withEndAction(() -> { // 动画执行完成,恢复可回收标记 holder.setIsRecyclable(true); }) .start(); } @Override public void onViewRecycled(@NonNull CustomViewHolder holder) { super.onViewRecycled(holder); // 兜底配对调用,不管之前有没有重置,回收时统一重置可回收标记 holder.setIsRecyclable(true); // 可在这里补充资源释放逻辑:停止动画、取消图片加载请求等 } // 手动移除条目的场景补充调用 public void deleteItem(int position) { // 先获取待移除条目的ViewHolder,重置标记 CustomViewHolder targetHolder = recyclerView.findViewHolderForAdapterPosition(position); if (targetHolder != null) { targetHolder.setIsRecyclable(true); } dataList.remove(position); notifyItemRemoved(position); } static class CustomViewHolder extends RecyclerView.ViewHolder { TextView titleText; View animView; public CustomViewHolder(@NonNull View itemView) { super(itemView); titleText = itemView.findViewById(R.id.title); animView = itemView.findViewById(R.id.anim_view); } } }
注意:非必要场景不建议禁用ViewHolder回收,会大幅降低RecyclerView的运行性能。如果只是为了解决复用导致的视图状态错乱问题,优先在onBindViewHolder中主动重置所有View的状态即可,不需要直接禁用回收机制。
内容的提问来源于stack exchange,提问作者Jessica
相关产品推荐
相关产品推荐

