Android ListView ViewHolder 工具类
一、思路
1、根据ViewGruop对象与id,获取子View
2、利用Tag与Map,保存ViewGroup中的所有子View,
3、使用泛型返回子View
二、实现步骤
1、利用id,获取子View并以泛型返回
public static <T extends View> T get(View view, int id)
2、获取Tag,如果为空,则设置Tag
SparseArray<View> viewHolder = (SparseArray<View>) view.getTag();
if (viewHolder == null) {
viewHolder = new SparseArray();
view.setTag(viewHolder);
}
3、使用Tag中的Map,获取子View,如果为空,则添加子View并保存到Map中
View childView = viewHolder.get(id);
if (childView == null) {
childView = view.findViewById(id);
viewHolder.put(id, childView);
}
4、返回子View
return (T) childView;
三、源码
public class ViewHolder {
@SuppressWarnings("unchecked")
public static <T extends View> T get(View view, int id) {
SparseArray<View> viewHolder = (SparseArray<View>) 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;
}
}