首先获取一级分类,通过MVP搭建框架,解析第一级类的数据
在解析的页面做解析第一级的数据操作
只有在二级获取三级的时候使用RecyclerView 嵌套RecyclerView
使用RecyclerView,创建布局文件
//--------------------------------------------左边一级列表---------------------------------------
@Override
public void getLeftlist(final String data) {
//创建线程
getActivity().runOnUiThread(new Runnable() {
private LeftBeans leftBeans;
private List<LeftBeans.ResultBean> left;
@Override
public void run() {
//解析数据
Gson gson = new Gson();
leftBeans = gson.fromJson(data, LeftBeans.class);
left = leftBeans.getResult();
//第一级分类的适配器
LeftAdapter leftAdapter = new LeftAdapter(getActivity(),left);
leftlist.setAdapter(leftAdapter);
//点击事件
leftAdapter.setClick(new LeftAdapter.click() {
@Override
public void click(View view, int position) {
//获取第一级分类的id
String gid = leftBeans.getResult().get(position).getId();
Toast.makeText(getActivity(),gid.toString(),Toast.LENGTH_LONG).show();
//当点击第一级的名称时,将第一级的id传给二级
rightPrsenter.getList(gid);
}
});
}
});
}
第一级分类的适配器
package com.example.adapter;
import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v4.app.FragmentActivity;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.example.bean.LeftBeans;
import com.example.zhousan.R;
import java.util.List;
public class LeftAdapter extends RecyclerView.Adapter<LeftAdapter.ViewHolder> {
Context context;
List<LeftBeans.ResultBean> list;
public LeftAdapter(Context context, List<LeftBeans.ResultBean> list) {
this.context = context;
this.list = list;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view = View.inflate(context,R.layout.leftitem,null); //一级分类的xml文件
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull final ViewHolder viewHolder, int i) {
viewHolder.name.setText(list.get(i).getName()); //获取名称
//---------------------------------------一级条目点击事件----------------------------------------
viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
int layoutPosition = viewHolder.getLayoutPosition();
View itemView = viewHolder.itemView;
if(click!=null){
click.click(itemView,layoutPosition);
}
}
});
//-------------------------------------------长按事件---------------------------------------
viewHolder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View view) {
int layoutPosition = viewHolder.getLayoutPosition();
View itemView = viewHolder.itemView;
if(longclick!=null){
longclick.longclick(itemView,layoutPosition);
}
return true;
}
});
}
@Override
public int getItemCount() {
return list.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
private final TextView name;
public ViewHolder(@NonNull View itemView) {
super(itemView);
name = itemView.findViewById(R.id.name);
}
}
//点击事件
public interface click{
void click(View view,int position);
}
//长按事件
public interface longclick{
void longclick(View view,int position);
}
//声明接口
public click click;
public longclick longclick;
//设置监听方法
public void setClick(LeftAdapter.click click) {
this.click = click;
}
public void setLongclick(LeftAdapter.longclick longclick) {
this.longclick = longclick;
}
}
接下来解析第二级数据
同上 mvp 根据id拼接接口
//-------------------------------------------右边二级列表----------------------------------------
@Override
public void getRightlist(final String data) {
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
Gson gson = new Gson();
RightBeans rightBeans = gson.fromJson(data, RightBeans.class);
List<RightBeans.ResultBean> right = rightBeans.getResult();
//适配器
RightAdapter rightAdapter = new RightAdapter(getActivity(), right);
rightlist.setAdapter(rightAdapter);
}
});
二级适配器
package com.example.adapter;
import android.content.Context;
import android.os.Handler;
import android.support.annotation.NonNull;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.example.api.Api;
import com.example.bean.LeftBeans;
import com.example.bean.RightBeans;
import com.example.bean.SanGoodBean;
import com.example.network.OkHttp;
import com.example.zhousan.R;
import com.google.gson.Gson;
import java.io.IOException;
import java.util.List;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.Response;
public class RightAdapter extends RecyclerView.Adapter<RightAdapter.ViewHolder> {
Handler handler = new Handler(); //线程 解析三级类的时候用
Context context;
List<RightBeans.ResultBean> list;
public RightAdapter(Context context, List<RightBeans.ResultBean> list) {
this.context = context;
this.list = list;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
//二级xml文件 里面包含一个标题 一个RecyclerView 这个是RecyclerView 嵌套RecyclerView 做三级
View view = View.inflate(context,R.layout.rightitem,null);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull final ViewHolder viewHolder, int i) {
viewHolder.name.setText(list.get(i).getName()); //获取二级分类的名称
//创建网格布局 解析第三层数据
GridLayoutManager gridLayoutManager = new GridLayoutManager(context, 3);
viewHolder.listview.setLayoutManager(gridLayoutManager);
//三级商品接口
// public static String rightgood = "http://172.17.8.100/small/commodity/v1/findCommodityByCategory? page=1&count=6&categoryId=";
//不走MVP框架 直接调用接口 根据二级id拼接接口 解析三层数据
OkHttp.okHttpGet(Api.rightgood+list.get(i).getId(), new Callback() {
@Override
public void onFailure(Call call, IOException e) {
//失败的方法 不做任何操作
}
@Override
public void onResponse(Call call, final Response response) throws IOException {
//开启线程
handler.post(new Runnable() {
@Override
public void run() {
String string = null;
try {
string = response.body().string(); //数据响应
//解析数据
Gson gson = new Gson();
SanGoodBean sanGoodBean = gson.fromJson(string, SanGoodBean.class);
List<SanGoodBean.ResultBean> sanlist = sanGoodBean.getResult();
//适配器
SanGoodAdapter sanGoodAdapter = new SanGoodAdapter(context, sanlist);
viewHolder.listview.setAdapter(sanGoodAdapter);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
});
以上方法是基于二级和三级各有一个接口,拼接的情况下的解析方法
以下是二级和三级公用一个接口的情况下解析数据的方法
//--------------------------------------------------第二层数据---------------------------------------------
private List<GoodBean.DataBean.SpusBean> twolist; //这是详细的类
//创建布局
linearLayoutManager = new LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false);
viewHolder.relistview02.setLayoutManager(linearLayoutManager);
for (int j = 0;j<list.size();j++){ //j是自定义的
twolist = list.get(i).getSpus(); 获取上一级以下的数据 twolist是最后一级的类集合
}
//商品列表适配器
final TwoAdapter twoAdapter = new TwoAdapter(context,twolist);
viewHolder.relistview02.setAdapter(twoAdapter);
}
@Override
public int getItemCount() {
return list.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
private final TextView name;
private final RecyclerView listview;
public ViewHolder(@NonNull View itemView) {
super(itemView);
name = itemView.findViewById(R.id.biao);
//第三个页面的数据
listview = itemView.findViewById(R.id.listview);
}
}
}
三级商品具体分类的适配器
package com.example.adapter;
import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import com.bumptech.glide.Glide;
import com.example.bean.LeftBeans;
import com.example.bean.SanGoodBean;
import com.example.zhousan.R;
import java.util.List;
public class SanGoodAdapter extends RecyclerView.Adapter<SanGoodAdapter.ViewHolder> {
Context context;
List<SanGoodBean.ResultBean> list;
public SanGoodAdapter(Context context, List<SanGoodBean.ResultBean> list) {
this.context = context;
this.list = list;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view = View.inflate(context,R.layout.sangood,null); //布局文件
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull final ViewHolder viewHolder, int i) {
viewHolder.title.setText(list.get(i).getCommodityName()); //商品名称
viewHolder.price.setText("¥"+list.get(i).getPrice()+""); //商品价格
Glide.with(context).load(list.get(i).getMasterPic()).into(viewHolder.img); //商品图片
}
@Override
public int getItemCount() {
return list.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
private final ImageView img;
private final TextView price;
private final TextView title;
public ViewHolder(@NonNull View itemView) {
super(itemView);
img = itemView.findViewById(R.id.img);
price = itemView.findViewById(R.id.price);
title = itemView.findViewById(R.id.title);
}
}
}