Android通用数据适配器源码CommonAdapter

来源:互联网 发布:投稿网站源码 编辑:程序博客网 时间:2024/05/16 17:07
import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ImageView;import android.widget.TextView;import com.bumptech.glide.Glide;import java.util.ArrayList;/** * Created by capton on 2017/6/19. */public abstract class CommonAdapter<T> extends BaseAdapter {    public Context context;    private ArrayList<T> dataList;     private int resId;    public CommonAdapter(Context context,ArrayList<T> dataList,int resId) {        this.context = context;        this.resId=resId;        this.dataList = dataList;    }    @Override    public int getCount() {        return dataList.size();    }    @Override    public Object getItem(int position) {        return dataList.get(position);    }    @Override    public long getItemId(int position) {        return position;    }    @Override    public  View getView(int position, View convertView, ViewGroup parent){        ViewHolder viewHolder=ViewHolder.bind(context,convertView,parent,resId,position);        bindView(viewHolder, (T) getItem(position));        return viewHolder.getItemView();    }    public abstract void bindView(ViewHolder viewHolder,T obj);    public void add(T t){        dataList.add(t);        notifyDataSetChanged();    }    public void add(T t,int index){        dataList.add(index,t);        notifyDataSetChanged();    }    public void remove(T t){        dataList.remove(t);        notifyDataSetChanged();    }    public void remove(int index){        dataList.remove(index);        notifyDataSetChanged();    }    public static class ViewHolder {       private Context context;       private View convertView;       private int position;       private SparseArray<View> mViews;       private ViewHolder(Context context,ViewGroup parent,int layoutRes){           mViews=new SparseArray<>();           this.context=context;           convertView=LayoutInflater.from(context).inflate(layoutRes,parent,false);           convertView.setTag(this);       }    public static ViewHolder bind(Context context,View convertView,ViewGroup parent,int layoutRes,int position){        ViewHolder viewHolder;        if(convertView==null){             viewHolder=new ViewHolder(context,parent,layoutRes);        }else {            viewHolder= (ViewHolder) convertView.getTag();            viewHolder.convertView=convertView;        }        viewHolder.position=position;        return viewHolder;    }        public ViewHolder setText(int id,CharSequence text){            View textView=getView(id);            if(textView instanceof TextView){                ((TextView)textView).setText(text);            }            return this;        }        public ViewHolder setImageResource(int id,int drawableRes){            View imageView=getView(id);            if(imageView instanceof ImageView){                ((ImageView)imageView).setImageResource(drawableRes);            }else {                imageView.setBackgroundResource(drawableRes);            }            return this;        }        public ViewHolder setImageUrl(int id,String url){            View imageView=getView(id);            if(imageView instanceof ImageView){                Glide.with(context).load(url).into(((ImageView)imageView));            }            return this;        }        public ViewHolder setOnClickListener(int id,View.OnClickListener listener){              getView(id).setOnClickListener(listener);             return this;        }        public ViewHolder setTag(int id,Object obj){            getView(id).setTag(obj);            return this;        }    public <T extends View> T getView(int id){        T t= (T) mViews.get(id);        if(t==null){            t= (T) convertView.findViewById(id);            mViews.put(id,t);        }        return t;    }       public View getItemView(){           return convertView;       }   }}
原创粉丝点击