android list单一布局 万能基类适配器

来源:互联网 发布:vs2013写c语言 编辑:程序博客网 时间:2024/06/05 15:10

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,表示数据实体类;

原创粉丝点击