第八单元 万能适配器和BaseRecyclerViewAdapterHelper的使用

RecyclerView的万能适配器

首先写一个万能适配器的Holder的对象继承RecyclerView.ViewHolder 里面重写BaseHolder方法
然后定义一个getView方法从容器中取控件的id,这里要说的是 我们可以定义一个SparseArray的集合,设置View的泛型
从集合中根据id取控件
然后写一个BaseAdapter的适配器,继承RecyclerView.Adapter,泛型写成BaseHolder,重写三个方法,第一个方法是创建布局容器,第二个方法把行布局和控件绑定,第三个方法是返回长度,然后
定义上下文对象和数据源集合,构造,写一个getLayoutId的int型抽象方法查找行布局和一个绑定的抽象方法把控件绑定到布局上,然后生成子类,继承抽象方法在子类里定义不同的多布局适配

代码:

BaseHolder类

/**
 * 万能适配器的Holder 对象
 */
public class BaseHolder extends RecyclerView.ViewHolder {
    SparseArray<View> array=new SparseArray<>();
    public BaseHolder(@NonNull View itemView) {
        super(itemView);

    }
    /**
     * 从容器中取控件
     * @return
     */
    public View getView(int id){
        View v=null;
        v=array.get(id);//从集合中根据id取控件
        if(v==null){
            v=itemView.findViewById(id);
            array.put(id,v);
        }
            return  v;
    }
}

BaseAdapter适配器

public abstract class BaseAdapter<T> extends RecyclerView.Adapter<BaseHolder> {
    Context context;
    ArrayList<T> data;//数据源

    public BaseAdapter(Context context, ArrayList<T> data) {
        this.context = context;
        this.data = data;
    }

    public abstract int getLayoutID();
    @NonNull
    @Override
    public BaseHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        View inflate = LayoutInflater.from(context).inflate(getLayoutID(), null);
        return new BaseHolder(inflate);
    }

    @Override
    public void onBindViewHolder(@NonNull BaseHolder baseHolder, int i) {
        binding(baseHolder,i);
    }
    public abstract void binding(BaseHolder baseHolder,int i);//绑定
    @Override
    public int getItemCount() {
        return data.size();
    }
}

子适配器

public class FirstAdapter extends BaseAdapter<Integer> {
    Context context;
    ArrayList<Integer> strings1=new ArrayList<>();
    ArrayList<String> strings2=new ArrayList<>();

    public FirstAdapter(Context context1, ArrayList<Integer> strings1,ArrayList<String> strings2) {
        super(context1, strings1);
        this.context = context1;
        this.strings1 = strings1;
        this.strings2 = strings2;
    }

    @Override
    public int getLayoutID() {
        return R.layout.text;
    }

    @Override
    public void binding(BaseHolder baseHolder, int i) {
        //找到控件 赋值
        ImageView imageView = (ImageView) baseHolder.getView(R.id.image);
        imageView.setImageResource(strings1.get(i));
        TextView textView= (TextView) baseHolder.getView(R.id.text);
        textView.setText(strings2.get(i));
    }
}

MainActivity类

public class MainActivity extends AppCompatActivity {
    private RecyclerView recyclerView;
    private ArrayList<Integer> list = new ArrayList<>();
    private ArrayList<String> list2 = new ArrayList<>();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        recyclerView = findViewById(R.id.recyclerView);
//        recyclerView.setLayoutManager(new LinearLayoutManager(this));
        StaggeredGridLayoutManager staggeredGridLayoutManager = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL);
        recyclerView.setLayoutManager(staggeredGridLayoutManager);
        list.add(R.mipmap.aa);
        list.add(R.mipmap.bb);
        list.add(R.mipmap.cc);
        list.add(R.mipmap.dd);
        list.add(R.mipmap.ee);
        list.add(R.mipmap.ff);
        list.add(R.mipmap.gg);
        list.add(R.mipmap.hh);
        list.add(R.mipmap.ii);
        list.add(R.mipmap.jj);
        list.add(R.mipmap.kk);

        list2.add("迟暮");
        list2.add("暮衍");
        list2.add("笑辞");
        list2.add("秋意");
        list2.add("爱殇");
        list2.add("苏墨");
        list2.add("陈秋");
        list2.add("无羁");
        list2.add("忘羡");
        list2.add("离合");
        list2.add("东苑");
        FirstAdapter firstAdapter=new FirstAdapter(Main2Activity.this,list,list2);
        recyclerView.setAdapter(firstAdapter);

//        new BaseAdapter<>();
    }
}

效果

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值