public abstract class OneLayoutBaseAdapter<T> extends BaseAdapter {
private Context context;
private List<T> datas;
private int resid;
public OneLayoutBaseAdapter(Context context, int resid) {
this.context = context;
this.resid = resid;
datas=new ArrayList<>();
}
public void setDatas(List<T> datas) {
this.datas = datas;
this.notifyDataSetChanged();
}
public void addDatas(List<T> datas){
this.datas.addAll(datas);
this.notifyDataSetChanged();
}
public T getDatas(int position){
return datas.get(position);
}
@Override
public int getCount() {
return datas==null?0:datas.size();
}
@Override
public Object getItem(int i) {
return datas.get(i);
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(int i, View contentView, ViewGroup parent) {
ViewHolder viewHolder=null;
if(contentView==null){
contentView= LayoutInflater.from(context).inflate(resid,null);
viewHolder=new ViewHolder(contentView);
contentView.setTag(viewHolder);
}else {
viewHolder= (ViewHolder) contentView.getTag();
}
bindView(viewHolder,datas.get(i));
return contentView;
}
public abstract void bindView(ViewHolder viewHolder,T datas);
public class ViewHolder{
View layoutView;
SparseArray<View> sparseArray=new SparseArray<>();
public ViewHolder(View layoutView) {
this.layoutView = layoutView;
}
public View getView(int id){
View view=sparseArray.get(id);
if(view==null){
view=layoutView.findViewById(id);
sparseArray.put(id,view);
}
return view;
}
public ViewHolder bindTextView(int id,String value){
TextView textView= (TextView) getView(id);
textView.setText(value);
return this;
}
public ViewHolder bindImageView(int id,String URL){
ImageView imageView= (ImageView) getView(id);
Glide.with(context).load(URL).diskCacheStrategy(DiskCacheStrategy.ALL).into(imageView);
return this;
}
}
}
以上基类适配器,直接继承就ok了,示例:
public class FriendListAdapter extends OneLayoutBaseAdapter<String> {
public FriendListAdapter(Context context) {
super(context, R.layout.item_friendlist);
}
@Override
public void bindView(ViewHolder viewHolder, String datas) {
// TextView tv_friendname= (TextView) viewHolder.getView(R.id.tv_friendname);
viewHolder.bindTextView(R.id.tv_friendname,datas);
}
}
示例中的Sting 就是基类中的T,表示数据实体类;