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

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android Studio中数据适配器的核心代码通常包括以下几个部分: 1. 定义适配器类:通常继承自BaseAdapter或其子类,实现其中的抽象方法,如getView()、getItem()、getItemId()等。 2. 实例化适配器:在Activity或Fragment中实例化适配器对象,并将其与ListView或RecyclerView等控件绑定。 3. 设置数据源:将数据源(如List或Cursor)传递给适配器,以便适配器能够将数据显示在控件上。 以下是一个简单的ListView适配器的核心代码示例: ``` public class MyAdapter extends BaseAdapter { private List<String> mData; public MyAdapter(List<String> data) { mData = data; } @Override public int getCount() { return mData.size(); } @Override public Object getItem(int position) { return mData.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) { convertView = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_layout, parent, false); } TextView textView = convertView.findViewById(R.id.text_view); textView.setText(mData.get(position)); return convertView; } } ``` 在这个示例中,我们定义了一个MyAdapter类,继承自BaseAdapter,并实现了其中的抽象方法。在构造方法中,我们将数据源List传递给适配器。在getView()方法中,我们使用LayoutInflater加载item_layout布局文件,并将数据显示在TextView上。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值