Android ViewHolder工具

时间:2024-08-16 00:06:38
 import android.util.SparseArray;
import android.view.View; /**
* 封装了setTag()和getTag()方法
* 封装了findViewById()方法
* ViewHolder为ListView的每个条目打上tag,
* 这个tag是一个数组对象,里面存储每个条目所包含的子控件对象,key为资源id
* 当listview滑出顶部时,最上面的条目(convertView)被回收
* 最下面需要显示的条目就不需要再用父容器去找子控件(耗时操作),
* 而是直接取得父容器的tag,在tag中获取到子控件对象
*
*
*/
public class ViewHolder {
/**
*
*
*
* @param view
* 控件父容器对象
* @param id
* 控件id
* @return 控件对象
*/
@SuppressWarnings("unchecked")
public static <T extends View> T get(View view, int id) {
// 如果父容器不为空,获取父容器的tag,为数组初始化............
SparseArray<View> viewHolder = (SparseArray<View>) view.getTag();
if (viewHolder == null) {
// 如果数组为空,新建数组
viewHolder = new SparseArray<View>();
// 将父容器打上数组的tag...............
view.setTag(viewHolder);
}
// 根据控件的资源id在数组中找控件
View childView = viewHolder.get(id);
// 如果控件为空
if (childView == null) {
// 在父容器找
childView = view.findViewById(id);
// 将控件的资源id和控件对象存到数组中
viewHolder.put(id, childView);
}
// 返回子控件
return (T) childView;
}
}