標籤:android listview adapter baseadapter
public abstract class SimpleBaseAdapter<T> extends BaseAdapter {protected Context context;protected List<T> data;public SimpleBaseAdapter(Context context){this(context, null);}public SimpleBaseAdapter(Context context, List<T> data) {this.context = context;this.data = data == null ? new ArrayList<T>() : new ArrayList<T>(data);}@Overridepublic int getCount() {return data.size();}@Overridepublic Object getItem(int position) {if (position >= data.size())return null;return data.get(position);}@Overridepublic long getItemId(int position) {return position;}/** * 該方法需要子類實現,需要返回item布局的resource id * * @return */public abstract int getItemResource();/** * 使用該getItemView方法替換原來的getView方法,需要子類實現 * * @param position * @param convertView * @param parent * @param holder * @return */public abstract View getItemView(int position, View convertView, ViewHolder holder);@Overridepublic View getView(int position, View convertView, ViewGroup parent) {ViewHolder holder;if (null == convertView) {convertView = View.inflate(context, getItemResource(), null);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("unchecked")public <T extends View> T getView(int resId) {View v = views.get(resId);if (v == null) {v = convertView.findViewById(resId);views.put(resId, v);}return (T) v;}}public void addAll(List<T> elem) {data.addAll(elem);notifyDataSetChanged();}public void remove(T elem) {data.remove(elem);notifyDataSetChanged();}public void remove(int index) {data.remove(index);notifyDataSetChanged();}public void replaceAll(List<T> elem) {data.clear();data.addAll(elem);notifyDataSetChanged();}}
執行個體代碼
private class MyAdapter extends SimpleBaseAdapter<String> {public MyAdapter(Context context, List<String> data) {super(context, data);}@Overridepublic int getItemResource() {return R.layout.layout_item;}@Overridepublic View getItemView(int position, View convertView, SimpleBaseAdapter<String>.ViewHolder holder) {TextView tvIndex = holder.getView(R.id.item_index);TextView tvContent = holder.getView(R.id.item_content);tvIndex.setText("p:" + position);tvContent.setText(getItem(position).toString());return convertView;}}
Android_自訂簡便快速通用的SimpleBaseAdapter