博客
关于我
ViewHolder的改进写法
阅读量:796 次
发布时间:2023-02-26

本文共 1539 字,大约阅读时间需要 5 分钟。

ViewHolder的通用写法虽然简单,但对于大量Adapter的开发工作来说却显得繁琐重复。为了简化代码,许多开发者使用优化后的ViewHolder设计,这种方法既简洁又高效。

传统的ViewHolder写法通常包括以下步骤:检查convertView是否为空,如果为空则通过LayoutInflater.inflate()获取视图,并初始化ViewHolder以及子视图的赋值。虽然这种方法直观,但在多个Adapter类中重复编写会导致代码冗余。

为了解决这个问题,一些开发者提出了一个更为简洁的ViewHolder实现方法。这种方法通过声明一个静态ViewHolder类,提供一个通用的获取方式,减少了代码的重复性。例如:

public class ViewHolder {
public static
T get(View view, int id) {
SparseArray
viewHolder = (SparseArray
) view.getTag();
if (viewHolder == null) {
viewHolder = new SparseArray
();
view.setTag(viewHolder);
}
View childView = viewHolder.get(id);
if (childView == null) {
childView = view.findViewById(id);
viewHolder.put(id, childView);
}
return (T) childView;
}
}

这种实现方式提供了一个通用的方法,适用于多种View类型的赋值操作。仅需在Adapter的getView方法中调用ViewHolder.get()即可完成赋值工作,例如:

@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = LayoutInflater.from(context).inflate(R.layout.banana_phone, parent, false);
}
ImageView bananaView = ViewHolder.get(convertView, R.id.banana);
TextView phoneView = ViewHolder.get(convertView, R.id.phone);
BananaPhone bananaPhone = getItem(position);
phoneView.setText(bananaPhone.getPhone());
bananaView.setImageResource(bananaPhone.getBanana());
return convertView;
}

这种设计方式不仅简化了代码,还提高了可维护性和扩展性。通过使用SparseArray存储子View,可以更高效地管理和获取各个View组件。

转载地址:http://fwvfk.baihongyu.com/

你可能感兴趣的文章
OpenCV与AI深度学习 | 基于GAN的零缺陷样本产品表面缺陷检测
查看>>
OpenCV与AI深度学习 | 基于OpenCV和深度学习预测年龄和性别
查看>>
OpenCV与AI深度学习 | 基于Python和OpenCV将图像转为ASCII艺术效果
查看>>
OpenCV与AI深度学习 | 基于PyTorch实现Faster RCNN目标检测
查看>>
OpenCV与AI深度学习 | 基于PyTorch语义分割实现洪水识别(数据集 + 源码)
查看>>
OpenCV与AI深度学习 | 基于YOLO11的车体部件检测与分割
查看>>
OpenCV与AI深度学习 | 基于YOLOv8的停车对齐检测
查看>>
OpenCV与AI深度学习 | 基于机器视觉的磁瓦表面缺陷检测方案
查看>>
OpenCV与AI深度学习 | 基于深度学习的轮胎缺陷检测系统
查看>>
OpenCV与AI深度学习 | 实战 | OpenCV实现扫描文本矫正应用与实现详解(附源码)
查看>>
OpenCV与AI深度学习 | 实战 | 使用YoloV8实例分割识别猪的姿态(含数据集)
查看>>
OpenCV与AI深度学习 | 实战 | 基于YoloV5和Mask RCNN实现汽车表面划痕检测(步骤 + 代码)
查看>>
OpenCV与AI深度学习 | 干货 | 深度学习模型训练和部署的基本步骤
查看>>
OpenCV与AI深度学习 | 手把手教你用Python和OpenCV搭建一个半自动标注工具(详细步骤 + 源码)
查看>>
OpenCV与AI深度学习 | 深度学习检测小目标常用方法
查看>>
Opencv中KNN背景分割器
查看>>
OpenCV中基于已知相机方向的透视变形
查看>>
opencv中读写视频
查看>>
opencv之namedWindow,imshow出现两个窗口
查看>>
opencv之模糊处理
查看>>