Android通用数据适配器源码CommonAdapter

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;
       }
   }

}

猜你喜欢

转载自blog.csdn.net/ccapton/article/details/73478056
今日推荐