在Android项目中,我们经常会用到ViewHolder。通常我们会在Adapter里面自定义一个ViewHolder类,并加入我们期望复用的View,具体做法就不赘述了。 通常在处理ViewHolder时,我们遇到的最大挑战就是代码冗余,每一个Adapter里面我们都需要有这么一个ViewHolder。
今天在网上看到有人发明了一种更省事的写法,具体见下面代码:
public static <T extends View> T findViewById(View view, int id) {
SparseArray<View> viewHolder = (SparseArray<View>) view.getTag();
if (viewHolder == null) {
viewHolder = new SparseArray<View>();
view.setTag(viewHolder);
}
View childView = viewHolder.get(id);
if (childView == null) {
childView = view.findViewById(id);
viewHolder.put(id, childView);
}
return (T) childView;
}
这样一来,我们只需要在getView里面调用ViewHoler的findViewById方法即可获得我们需要的View。
突然觉得省事了好多,再也不用到处复制ViewHolder了。 绝对要赞一个!