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);
            //關聯控件
        }
    }
}

歐克 ,這樣設置就可以完成不同數據加載不同的佈局了

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