import android.content.Context; import android.graphics.Bitmap; import android.util.SparseArray; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.TextView; import java.util.List; public abstract class LvCommonAdapter<T> extends BaseAdapter { protected LayoutInflater mInflater; protected Context mContext; protected List<T> mDatas; protected final int mItemLayoutId; public LvCommonAdapter(Context context, int itemLayoutId, List<T> mDatas ) { this.mContext = context; this.mInflater = LayoutInflater.from(mContext); this.mDatas = mDatas; this.mItemLayoutId = itemLayoutId; } @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) { final ViewHolder viewHolder = getViewHolder(position, convertView,parent); convert(viewHolder, getItem(position)); return viewHolder.getConvertView(); } public abstract void convert(ViewHolder helper, T item); private ViewHolder getViewHolder(int position, View convertView, ViewGroup parent) { return ViewHolder.get(mContext, convertView, parent, mItemLayoutId, position); } /** * 內部類 ViewHolder */ public static class ViewHolder { private final SparseArray<View> mViews; private int mPosition; private View mConvertView; private ViewHolder(Context context, ViewGroup parent, int layoutId, int position) { this.mPosition = position; this.mViews = new SparseArray<View>(); mConvertView = LayoutInflater.from(context).inflate(layoutId, parent,false); mConvertView.setTag(this); } /** * 拿到一個ViewHolder對象 */ public static ViewHolder get(Context context, View convertView, ViewGroup parent, int layoutId, int position){ if (convertView == null) { return new ViewHolder(context, parent, layoutId, position); } return (ViewHolder) convertView.getTag(); } public View getConvertView(){ return mConvertView; } /** * 通過控件的Id獲取對於的控件,如果沒有則加入views */ public <T extends View> T getView(int viewId){ View view = mViews.get(viewId); if (view == null) { view = mConvertView.findViewById(viewId); mViews.put(viewId, view); } return (T) view; } /** * 爲TextView設置字符串 */ public ViewHolder setText(int viewId, String text) { TextView view = getView(viewId); view.setText(text); return this; } /** * 爲ImageView設置資源圖片 */ public ViewHolder setImageResource(int viewId, int drawableId) { ImageView view = getView(viewId); view.setImageResource(drawableId); return this; } /** * 爲ImageView設置 Bitmap圖片 */ public ViewHolder setImageBitmap(int viewId, Bitmap bm) { ImageView view = getView(viewId); view.setImageBitmap(bm); return this; } /** * 爲ImageView設置THHP url 圖片 */ public ViewHolder setImageByUrl(int viewId, String url) { //ImageLoader 加載圖片 // ImageLoader.getInstance(3, Type.LIFO).loadImage(url, (ImageView) getView(viewId)); // Glide 加載圖片配置 compile 'com.github.bumptech.glide:glide:3.8.0' // Glide.with(context).load(url).into(view); return this; } public int getPosition() { return mPosition; } } }
使用:
Student 爲數據類型,可以根據需要傳入需要的類型。
LvCommonAdapter mAdapter = new LvCommonAdapter<Student>(CardListActivity.this, R.layout.item_card, datas) { @Override public void convert(ViewHolder helper, Student item) { helper.setText(R.id.name, item.getName()); helper.setText(R.id.address, item.getAddress()); } }; mylistView.setAdapter(mAdapter);