Andorid中实现Adapter时,在getView中创建ViewHolder已成了约定俗成的事。那么怎么写才能让代码看起来更简单呢?
package com.v.vutils.utils;
import android.view.View;
import java.util.HashMap;
public class ViewHolder {
public static <T extends View> T get(View view, int id) {
HashMap<Integer, View> viewMap = (HashMap<Integer, View>) view.getTag();
if (viewMap == null) {
viewMap = new HashMap<Integer, View>();
view.setTag(viewMap);
}
View childView = viewMap.get(id);
if (childView == null) {
childView = view.findViewById(id);
viewMap.put(id, childView);
}
return (T) childView;
}
}
Adapter的getView方法中使用:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = LayoutInflater.from(getContext()).inflate(R.layout.item_main, null);
}
FeatureModule model = getItem(position);
((ImageView) ViewHolder.get(convertView, R.id.im_item_iv))
.setImageResource(model.icon);
((TextView) ViewHolder.get(convertView, R.id.im_title_tv))
.setText(model.title);
((TextView) ViewHolder.get(convertView, R.id.im_sub_title_tv))
.setText(model.description);
return convertView;
}
是不是觉得很简单,再也不用为每一个Adapter单独创建ViewHolder了。