view = convertView; viewHolder= (ViewHolder) view.getTag();详解
时间: 2023-08-31 16:20:52 浏览: 227
ViewHolder
5星 · 资源好评率100%
在 Android 中开发 ListView 或 RecyclerView 时,为了提高列表的滑动流畅度和性能表现,通常会采用 ViewHolder 模式。ViewHolder 是一个用于保存 convertView 中子 View 的对象,可以通过 view.setTag() 方法将其与 convertView 绑定起来。在 getView() 或 onCreateViewHolder() 方法中,如果 convertView 不为 null,则可以直接使用 convertView,并调用 getTag() 方法获取 ViewHolder 对象,避免频繁地调用 findViewById() 方法。这样可以大大减少 UI 线程的工作量,提高应用的性能表现。
具体实现步骤如下:
1. 在 Adapter 中定义 ViewHolder 类,用于保存 convertView 中子 View 的对象。
```java
class ViewHolder {
TextView title;
ImageView icon;
}
```
2. 在 getView() 或 onCreateViewHolder() 方法中,通过 convertView 和 ViewHolder 实现优化。
```java
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
if (convertView == null) {
convertView = LayoutInflater.from(context).inflate(R.layout.item_layout, parent, false);
viewHolder = new ViewHolder();
viewHolder.title = convertView.findViewById(R.id.title);
viewHolder.icon = convertView.findViewById(R.id.icon);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
// 设置子 View 的数据
viewHolder.title.setText(getItem(position).getTitle());
viewHolder.icon.setImageResource(getItem(position).getIconResId());
return convertView;
}
```
在上述代码中,如果 convertView 不为 null,则通过 convertView.getTag() 方法获取 ViewHolder 对象,否则创建新的 convertView 和 ViewHolder 对象,并将其绑定起来,最后设置子 View 的数据并返回 convertView。
这样,就可以通过 ViewHolder 模式优化列表的性能表现。
阅读全文