多条目适配器

本文介绍了如何创建一个多条目适配器,用于在RecyclerView中展示不同数据格式的内容。适配器继承自RecyclerView,并包含多个内部适配器,以实现多种数据类型的显示。通过设置上下文,创建Bean层数据,然后为每种数据类型创建单独的方法来绑定视图。在onCreateViewHolder中加载布局,并在onBindViewHolder中通过ViewHolder绑定适配器和样式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

多条目就是展示不同的数据格式,首先我们需要继承的是RecyclerView,内部也是RecyclerView,因为我们需要在这个适配里添加多个适配器,进行一块展示

public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> 

设置上下文,并且创建bean层数据,取出数据进行展示

	private Context context;
    private UserBean.ResultBean resultBean;

    public MyAdapter(Context context, UserBean.ResultBean resultBean) {
        this.context = context;
        this.resultBean = resultBean;
    }

创建多条目的方法,有几种数据就展示用几种方法,然后每一种方法展示一种数据

	@Override
    public int getItemViewType(int position) {
        int type = 0;
        switch (position){
            case 0:
                type = 0;
                break;
            case 1:
                type = 1;
                break;
            case 2:
                type = 2;
                break;
        }
        return type;
    }

然后在onCreateViewHolder方法中连接每一层的布局,并且通过每一层的Holder,获取每一层的控件

	public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        int itemViewType = getItemViewType(i);
        if(itemViewType == 0){
            View view = View.inflate(context,R.layout.item_one,null);
            Holder holder = new Holder(view);
            return holder;
        }else if(itemViewType == 1){
            View view = View.inflate(context,R.layout.item_two,null);
            Holder2 holder2 = new Holder2(view);
            return holder2;
        }else if(itemViewType == 2){
            View view = View.inflate(context,R.layout.item_three,null);
            Holder3 holder3 = new Holder3(view);
            return holder3;
        }else{
            return null;
        }
    }

在onBindViewHolder的方法内部通过Holder方法连接每个适配器,再设置上布局样式即可

public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int i) {
        if(viewHolder instanceof Holder){
            Holder holder = (Holder) viewHolder;
            List<UserBean.ResultBean.RxxpBean.CommodityListBean> commodityList = resultBean.getRxxp().getCommodityList();
            holder.recycle1.setAdapter(new RxxpAdapter(context,commodityList));
            holder.recycle1.setLayoutManager(new GridLayoutManager(context,3));
        }else if(viewHolder instanceof Holder2){
            Holder2 holder2 = (Holder2) viewHolder;
            List<UserBean.ResultBean.MlssBean.CommodityListBeanXX> commodityList = resultBean.getMlss().getCommodityList();
            holder2.recycle2.setAdapter(new MlssAdapter(context,commodityList));
            holder2.recycle2.setLayoutManager(new LinearLayoutManager(context));
        }else if(viewHolder instanceof Holder3){
            Holder3 holder3 = (Holder3) viewHolder;
            List<UserBean.ResultBean.PzshBean.CommodityListBeanX> commodityList = resultBean.getPzsh().getCommodityList();
            holder3.recycle3.setAdapter(new PzshAdapter(context,commodityList));
            holder3.recycle3.setLayoutManager(new GridLayoutManager(context,2));
        }
    }

条目有几种就写几种

@Override
    public int getItemCount() {
        return 3;
    }

因为每个样式都不同,所以我创建了3个Holder继承RecyclerView.ViewHolder,生成内部的方法在里面获取控件

public static class Holder extends RecyclerView.ViewHolder{
        private RecyclerView recycle1;
        public Holder(@NonNull View itemView) {
            super(itemView);
            recycle1 = itemView.findViewById(R.id.recycle1);
        }
    }
    public static class Holder2 extends RecyclerView.ViewHolder{
        private RecyclerView recycle2;
        public Holder2(@NonNull View itemView) {
            super(itemView);
            recycle2 = itemView.findViewById(R.id.recycle2);
        }
    }
    public static class Holder3 extends RecyclerView.ViewHolder{
        private RecyclerView recycle3;
        public Holder3(@NonNull View itemView) {
            super(itemView);
            recycle3 = itemView.findViewById(R.id.recycle3);
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值