1. android中获取控件,如:
TextView textView = (TextView) view.findViewById(R.id.textView);
可以写个静态公共方法:
public static <T extends View> T findById(View view, int id) {
return (T) view.findViewById(id);
}
然后就可以如下使用:
TextView textView = Util.findById(view, R.id.textView);
(省去了烦人的强转实在不能更开心呀)
2. adapter中获取控件的简化
提取公共的ViewHolder,不需要再为每种 ItemView 定制ViewHolder 。
a. adapter只有一种 itemView
/**
* adapter里一种item
* @param view
* @param id
* @param <T>
* @return
*/
@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;
}
使用:
TextView textView = ViewHolder.get(convertView, R.id.textView);
b. adapter使用多种 itemView
/**
* 多种item需要用key区分
* @param view
* @param key
* @param id
* @param <T>
* @return
*/
public static <T extends View> T get(View view, int key, int id) {
SparseArray<View> viewHolder = (SparseArray<View>) view.getTag(key);
if (viewHolder == null) {
viewHolder = new SparseArray<>();
view.setTag(key, viewHolder);
}
View childView = viewHolder.get(id);
if (childView == null) {
childView = view.findViewById(id);
viewHolder.put(id, childView);
}
return (T) childView;
}
使用:
TextView textView = ViewHolder.get(convertView, R.layout.item_layout_1, R.id.textView);
(俺一般使用 layout 的 id 作为key来区分哈~)