package com.base.baseandroid; import android.content.Context; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import java.util.List; public abstract class CommonAdapter<T> extends BaseAdapter { private Context mContext; private List<T> mDatas; private int mLayoutId; public CommonAdapter(Context context, List<T> datas, int layoutId) { this.mContext = context; this.mDatas = datas; this.mLayoutId = layoutId; } @Override public int getCount() { return mDatas.size(); } @Override public T getItem(int position) { return mDatas.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder = ViewHolder.get(mContext, convertView, mLayoutId, position); setValueForView(holder, getItem(position)); return holder.getConvertView(); } public abstract void setValueForView(ViewHolder holder, T t); } package com.base.baseandroid; import com.lidroid.xutils.BitmapUtils; import android.content.Context; import android.graphics.Bitmap; import android.util.SparseArray; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.widget.ImageView; import android.widget.TextView; public class ViewHolder { private SparseArray<View> mViews; protected int mPosition; private View mConvertView; private Context context; private BitmapUtils bitmapUtils; public View getConvertView() { return mConvertView; } public ViewHolder(Context context, int layoutId, int position) { this.mPosition = position; this.mViews = new SparseArray<View>(); this.context = context; bitmapUtils = new BitmapUtils(context); mConvertView = LayoutInflater.from(context).inflate(layoutId, null); mConvertView.setTag(this); } public static ViewHolder get(Context context, View convertView, int layoutId, int position) { if (convertView == null) { return new ViewHolder(context, layoutId, position); } else { ViewHolder holder = (ViewHolder) convertView.getTag(); holder.mPosition = position; // 注意:这句代码是必须的,否则复用的时候position会出错 return holder; } } public <T extends View> T getViewById(int viewId) { View view = mViews.get(viewId); if (view == null) { view = getConvertView().findViewById(viewId); mViews.put(viewId, view); } return (T) view; } public ViewHolder setText(int viewId, String text) { TextView textView = getViewById(viewId); textView.setText(text); return this; } public ViewHolder setImageResource(int viewId, int resId) { ImageView imageView = getViewById(viewId); imageView.setImageResource(resId); return this; } public ViewHolder setImageBitmap(int viewId, Bitmap bitmap) { ImageView imageView = getViewById(viewId); imageView.setImageBitmap(bitmap); return this; } public ViewHolder setImg(int viewId, String url) { ImageView imageView = getViewById(viewId); bitmapUtils.display(imageView, url); return this; } public ViewHolder setImgOnClick(int viewId, OnClickListener onClickListener) { ImageView imageView = getViewById(viewId); imageView.setOnClickListener(onClickListener); return this; } } package com.base.adapter; import java.util.List; import android.content.Context; import android.view.View; import android.view.View.OnClickListener; import android.widget.Toast; import com.base.baseandroid.CommonAdapter; import com.base.baseandroid.ViewHolder; import com.base.bean.CountryBean; import com.example.baseandroid.R; public class MyAdapter extends CommonAdapter<CountryBean> { private Context context; public MyAdapter(Context context, List<CountryBean> data, int layoutId) { super(context, data, layoutId); this.context = context; } @Override public void setValueForView(ViewHolder holder, final CountryBean bean) { holder.setText(R.id.tv_list_country, bean.getcCountryName()); holder.setImg(R.id.iv_list_country, bean.getFlagImage()); holder.setImgOnClick(R.id.iv_list_country, new OnClickListener() { @Override public void onClick(View v) { Toast.makeText(context, bean.getcCountryName(), 1).show(); } }); } }
原文地址:http://luoguoxin.blog.51cto.com/8845916/1714600