package com.cjj.cartoon.adapter; import java.util.ArrayList; import android.content.Context; import android.util.SparseArray; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; public abstract class SimpleBaseAdapter<T> extends BaseAdapter { protected Context mContext; protected ArrayList<T> mDataList; ViewHolder holder = null; public SimpleBaseAdapter(Context context, ArrayList<T> list) { this.mContext = context; this.mDataList = list == null ? new ArrayList<T>() : new ArrayList<T>(list); } @Override public int getCount() { return mDataList!=null ? mDataList.size() : 0; } public void updataData(ArrayList<T> list) { this.mDataList = list; this.notifyDataSetChanged(); } @Override public Object getItem(int position) { if (position >= mDataList.size()) return null; return mDataList.get(position); } @Override public long getItemId(int position) { return position; } /** * 该方法需要子类实现,需要返回item布局的resource id * * @return */ public abstract int getItemResourceId(); /** * 使用该getItemView方法替换原来的getView方法,需要子类实现 * * @param position * @param convertView * @param holder * @return */ public abstract View getItemView(int position, View convertView, ViewHolder holder); @SuppressWarnings("unchecked") @Override public View getView(int position, View convertView, ViewGroup parent) { if( convertView == null ){ convertView = LayoutInflater.from(mContext).inflate(getItemResourceId(), parent, false); holder = new ViewHolder( convertView ); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } return getItemView(position, convertView, holder); } public class ViewHolder { private SparseArray<View> views = new SparseArray<View>(); private View convertView; public ViewHolder(View convertView) { this.convertView = convertView; } @SuppressWarnings({ "hiding", "unchecked" }) public <T extends View> T getView(int resId) { View v = views.get(resId); if (null == v) { v = convertView.findViewById(resId); views.put(resId, v); } return (T) v; } } }