因公司需求,需要对条码数据进行数据查询,但是返回的结果是多种类型的,所以需要根据返回的数据类型进行不同布局的显示。所以就需要用到多布局加载
网上也找到了很多的文章,但是就是无法实现我想要的效果,根据一上午的折腾终于将完成了我的需求,
废话也不多说,直接进入主题
首先我们需要知道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);
//关联控件
}
}
}
欧克 ,这样设置就可以完成不同数据加载不同的布局了