RecyclerView加载多种布局

因公司需求,需要对条码数据进行数据查询,但是返回的结果是多种类型的,所以需要根据返回的数据类型进行不同布局的显示。所以就需要用到多布局加载
网上也找到了很多的文章,但是就是无法实现我想要的效果,根据一上午的折腾终于将完成了我的需求,
废话也不多说,直接进入主题
在这里插入图片描述
首先我们需要知道Recyclerview.Adapter里面方法执行的顺序

①getItemCount->获取要显示的item个数
②getItemViewType ->获取要显示的item类型
③onCreateViewHolder
④onBindViewHolder

我的数据类型:

{
    "dataliststate": "xxxx",
    "datalist": [
        {
            "id": "xx",
            "chanpinproduct": "xxxx",
            "chukuriqi": "xxxx",
            "duifangdanwei": "xxxx",
            "chanpinbianhao": "xxxx",
            "chukutime": "xxxx"
        },
        {
            "id": "xx",
            "chanpinproduct": "xxxx",
            "chukuriqi": "xxxx",
            "duifangdanwei": "xxxx",
            "chanpinbianhao": "xxxx",
            "chukutime": "xxxx"
        }
    ],
    "fanxiustate": "xxxx",
    "fanxiu": [
        {
            "receive_date": "xxxx",
            "customer": "xxxx",
            "person": "xx",
            "hv": "xx",
            "sv": "xx",
            "fault": "xx",
            "maint": "xx",
            "hsv": "xx",
            "maint_id": "xx",
            "maint_date": "xx",
            "tabflag": "xx",
            "flagid": xx
        }
    ],

}

数据加载


var sss: MutableList<Object> = ArrayList()
 //封装的网络请求 RetrofitUtil.retrofitService.gettiaomazhuisu(data!!.getStringExtra("wojiushiwo")).subscribeOn(Schedulers.io())
                      .observeOn(AndroidSchedulers.mainThread())
                      .subscribe {
                          sss.clear()
                        if(it.fanxiustate.equals("access")){
                            for (fanxiuBean in it.fanxiu) {
                                sss.add(fanxiuBean as Object)
                            }
                          }
                          if(it.dataliststate.equals("access")){
                              for (datalistBean in it.datalist) {
                                  sss.add(datalistBean as Object)
                              }
                          }
                      //给适配器设置数据
                      var adapter = TiaomaZhuisussAdapter(sss as List<Object>)
                     //关联列表和适配器
                       tiaomazhuisu_liebiao.adapter = adapter

                      }

TiaomaZhuisussAdapter

public class TiaomaZhuisussAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
    private int ITEM_TITLE = 1;
    private int ITEM_CONTENT = 2;
    private List<Object> wow;
    public TiaomaZhuisussAdapter(List<Object> data){
        wow = data;
    }
    @NonNull
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = null;
        RecyclerView.ViewHolder holder = null;
        if (viewType == ITEM_TITLE) {
            //指定要加载的布局
            view = LayoutInflater.from(parent.getContext()).inflate(R.layout.dingdanss_item, parent, false);
            holder = new ViewHolderTitle(view);
        } else if (viewType == ITEM_CONTENT) {
        //指定要加载的另一个布局
            view = LayoutInflater.from(parent.getContext()).inflate(R.layout.dingdan_item, parent, false);
            holder = new ViewHolderContent(view);

        }
        return holder;

    }

    @Override
    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int position) {
        if(viewHolder instanceof ViewHolderTitle){
            TiaomaZhuisuBeans.DatalistBean data = (TiaomaZhuisuBeans.DatalistBean) wow.get(position);
            //将数据添加到布局中
        }else if(viewHolder instanceof ViewHolderContent){
            TiaomaZhuisuBeans.FanxiuBean fanxiu = (TiaomaZhuisuBeans.FanxiuBean) wow.get(position);
           //将数据添加到另一个布局中
        }

    }

    @Override
    public int getItemCount() {
        return wow ==null?0:wow.size();
    }

    @Override
    public int getItemViewType(int position) {
       if(wow.get(position) instanceof TiaomaZhuisuBeans.DatalistBean){
           return ITEM_TITLE;
       }else if(wow.get(position) instanceof TiaomaZhuisuBeans.FanxiuBean){
           return ITEM_CONTENT;
       }
        return super.getItemViewType(position);
    }

    private class ViewHolderTitle extends RecyclerView.ViewHolder {
        private TextView first,second,third,fourth;
        public ViewHolderTitle(View view) {
            super(view);
            //关联控件
        }
    }

    private class ViewHolderContent extends RecyclerView.ViewHolder {
        private TextView one,two,three,four,five,six,seven,eight,nine,ten,tenss;
        public ViewHolderContent(View view) {
            super(view);
            //关联控件
        }
    }
}

欧克 ,这样设置就可以完成不同数据加载不同的布局了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章