说ViewHolder

比较简单的内部类viewholder是比较好理解的,是在adapter中定义的一个静态内部类。

为什么是静态内部类呢?首先要说到静态内部类和非静态内部类的主要区别:非静态内部类会隐式地持有外部类的引用,而静态内部类不会。

声明ViewHolder静态内部类,可以将ViewHolder和外部类解引用。一般ViewHolder都很简单,不定义为static也没事。不过你将它定义为static的,显得更合理/更专业,这一点足够。

在项目开发中我们用的是下面的这种比较优化的ViewHolder,:

public class ViewHolder {
	// I added a generic return type to reduce the casting noise in client code
	@SuppressWarnings("unchecked")
	public static <T extends View> T get(View convertView, int id) {
		// SparseArray同HashMap<Integer,T>,是其一种优化
		SparseArray<View> viewArray = (SparseArray<View>) convertView.getTag();
		if (viewArray == null) {
			viewArray = new SparseArray<View>();
			convertView.setTag(viewArray);
		}
		View childView = viewArray.get(id);
		if (childView == null) {
			childView = convertView.findViewById(id);
			// 存入view
			viewArray.put(id, childView);
		}
		return (T) childView;
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值