Android ViewHolder工具
1 import android.util.SparseArray; 2 import android.view.View; 3 4 /** 5 * 封装了setTag()和getTag()方法 6 * 封装了findViewById()方法 7 * ViewHolder为ListView的每个条目打上tag, 8 * 这个tag是一个数组对象,里面存储每个条目所包含的子控件对象,key为资源id 9 * 当listview滑出顶部时,最上面的条目(convertView)被回收 10 * 最下面需要显示的条目就不需要再用父容器去找子控件(耗时操作), 11 * 而是直接取得父容器的tag,在tag中获取到子控件对象 12 * 13 * 14 */ 15 public class ViewHolder { 16 /** 17 * 18 * 19 * 20 * @param view 21 * 控件父容器对象 22 * @param id 23 * 控件id 24 * @return 控件对象 25 */ 26 @SuppressWarnings("unchecked") 27 public static <T extends View> T get(View view, int id) { 28 // 如果父容器不为空,获取父容器的tag,为数组初始化............ 29 SparseArray<View> viewHolder = (SparseArray<View>) view.getTag(); 30 if (viewHolder == null) { 31 // 如果数组为空,新建数组 32 viewHolder = new SparseArray<View>(); 33 // 将父容器打上数组的tag............... 34 view.setTag(viewHolder); 35 } 36 // 根据控件的资源id在数组中找控件 37 View childView = viewHolder.get(id); 38 // 如果控件为空 39 if (childView == null) { 40 // 在父容器找 41 childView = view.findViewById(id); 42 // 将控件的资源id和控件对象存到数组中 43 viewHolder.put(id, childView); 44 } 45 // 返回子控件 46 return (T) childView; 47 } 48 }