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了。