因公司需求,需要對條碼數據進行數據查詢,但是返回的結果是多種類型的,所以需要根據返回的數據類型進行不同佈局的顯示。所以就需要用到多佈局加載
網上也找到了很多的文章,但是就是無法實現我想要的效果,根據一上午的折騰終於將完成了我的需求,
廢話也不多說,直接進入主題
首先我們需要知道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);
//關聯控件
}
}
}
歐克 ,這樣設置就可以完成不同數據加載不同的佈局了