package com.yuyh.easyadapter.abslistview; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import com.yuyh.easyadapter.helper.DataHelper; import java.util.List; /** * https://github.com/smuyyh/EasyAdapter * * @author yuyh. * @date 2016/7/21. */ public abstract class EasyLVAdapter<T> extends BaseAdapter implements DataHelper<T> { protected Context mContext; protected List<T> mList; protected int[] layoutIds; protected LayoutInflater mLInflater; protected EasyLVHolder holder = new EasyLVHolder(); public EasyLVAdapter(Context context, List<T> list, int... layoutIds) { this.mContext = context; this.mList = list; this.layoutIds = layoutIds; this.mLInflater = LayoutInflater.from(mContext); } public EasyLVAdapter(Context context, List<T> list) { this.mContext = context; this.mList = list; this.mLInflater = LayoutInflater.from(mContext); } @Override public int getCount() { return mList == null ? 0 : mList.size(); } @Override public Object getItem(int position) { return mList == null ? null : mList.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { int layoutId = getViewCheckLayoutId(position); holder = holder.get(mContext, position, convertView, parent, layoutId); convert(holder, position, mList.get(position)); return holder.getConvertView(layoutId); } private int getViewCheckLayoutId(int position) { int layoutId; if (layoutIds == null || layoutIds.length == 0) { layoutId = getLayoutId(position, mList.get(position)); } else { layoutId = layoutIds[getLayoutIndex(position, mList.get(position))]; } return layoutId; } /** * 若构造函数没有指定layoutIds, 则必须重写该方法 * * @param position * @param item * @return layoutId */ public int getLayoutId(int position, T item) { return 0; } /** * 指定item布局样式在layoutIds的索引。默认为第一个 * * @param position * @param item * @return */ public int getLayoutIndex(int position, T item) { return 0; } public abstract void convert(EasyLVHolder holder, int position, T t); @Override public boolean addAll(List<T> list) { boolean result = mList.addAll(list); notifyDataSetChanged(); return result; } @Override public boolean addAll(int position, List list) { boolean result = mList.addAll(position, list); notifyDataSetChanged(); return result; } @Override public void add(T data) { mList.add(data); notifyDataSetChanged(); } @Override public void add(int position, T data) { mList.add(position, data); notifyDataSetChanged(); } @Override public void clear() { mList.clear(); notifyDataSetChanged(); } @Override public boolean contains(T data) { return mList.contains(data); } @Override public T getData(int index) { return mList.get(index); } @Override public void modify(T oldData, T newData) { modify(mList.indexOf(oldData), newData); } @Override public void modify(int index, T newData) { mList.set(index, newData); notifyDataSetChanged(); } @Override public boolean remove(T data) { boolean result = mList.remove(data); notifyDataSetChanged(); return result; } @Override public void remove(int index) { mList.remove(index); notifyDataSetChanged(); } }