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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值