依赖
compile 'com.google.code.gson:gson:2.6.2'
compile 'com.squareup.okhttp3:okhttp:3.3.0'
compile 'com.github.bumptech.glide:glide:3.7.0'
compile 'com.android.support:recyclerview-v7:26.0.0-alpha1'
权限
<uses-permission android:name="android.permission.INTERNET"/>
布局
gv_item页面
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="vertical">
<ImageView
android:id="@+id/gv_pic"
android:layout_width="60dp"
android:layout_height="60dp"
android:scaleType="centerCrop"
android:src="@mipmap/ic_launcher" />
<TextView
android:id="@+id/gv_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="商品名称"
android:textSize="15sp" />
</LinearLayout>
left_item页面
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/left_item_tv"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="vertical"
android:text="商品"
android:textSize="20sp">
</TextView>
right_item_layout页面
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:id="@+id/right_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="标题"
android:textSize="20sp" />
<com.daydayup.day16_fenlei.view.MyGridView
android:id="@+id/right_gv"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:numColumns="3"></com.daydayup.day16_fenlei.view.MyGridView>
</LinearLayout>
activity_main 页面
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
tools:context="com.daydayup.day16_fenlei.view.MainActivity">
<ListView
android:id="@+id/left_listview"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
/>
<ListView
android:id="@+id/right_listview"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="3"
/>
</LinearLayout>
下面就是代码了
adapters文件夹
MyAdapter1
public class MyAdapter1 extends BaseAdapter {
private Context context;
private List<LeftBean.DataBean> list;
public MyAdapter1(Context context,List<LeftBean.DataBean> list){
this.context=context;
this.list=list;
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
MyViewHolder myViewHolder=null;
if (convertView==null){
convertView=View.inflate(context, R.layout.left_item,null);
TextView textView = convertView.findViewById(R.id.left_item_tv);
myViewHolder=new MyViewHolder(textView);
convertView.setTag(myViewHolder);
}
else {
myViewHolder= (MyViewHolder) convertView.getTag();
}
myViewHolder.getTextView().setText(list.get(position).getName());
return convertView;
}
class MyViewHolder{
private TextView textView;
public MyViewHolder(TextView textView) {
this.textView = textView;
}
public TextView getTextView() {
return textView;
}
public void setTextView(TextView textView) {
this.textView = textView;
}
}
}
MyAdapter2
public class MyAdapter2 extends BaseAdapter {
private Context context;
private List<RightBean.DataBean> list;
public MyAdapter2(Context context,List<RightBean.DataBean> list){
this.context=context;
this.list=list;
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
MyViewHolder2 myViewHolder2=null;
if (convertView==null){
convertView=View.inflate(context, R.layout.right_item_layout,null);
TextView right_title = convertView.findViewById(R.id.right_title);
GridView right_gv = convertView.findViewById(R.id.right_gv);
myViewHolder2= new MyViewHolder2(right_title,right_gv);
convertView.setTag(myViewHolder2);
}
else {
myViewHolder2= (MyViewHolder2) convertView.getTag();
}
//赋值
myViewHolder2.getRight_tv().setText(list.get(position).getName());
//
List<RightBean.DataBean.ListBean> list = this.list.get(position).getList();
MyAdapter3 myAdapter3 = new MyAdapter3(context, list);
myViewHolder2.getRight_gv().setAdapter(myAdapter3);
//设置点击事件
myViewHolder2.getRight_gv().setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Toast.makeText(context,"Postiion"+position,Toast.LENGTH_SHORT).show();
}
});
return convertView;
}
class MyViewHolder2{
private TextView right_tv;
private GridView right_gv;
public MyViewHolder2(TextView right_tv, GridView right_gv) {
this.right_tv = right_tv;
this.right_gv = right_gv;
}
public TextView getRight_tv() {
return right_tv;
}
public void setRight_tv(TextView right_tv) {
this.right_tv = right_tv;
}
public GridView getRight_gv() {
return right_gv;
}
public void setRight_gv(GridView right_gv) {
this.right_gv = right_gv;
}
}
}
MyAdapter3
public class MyAdapter3 extends BaseAdapter {
private Context context;
private List<RightBean.DataBean.ListBean> list;
public MyAdapter3(Context context, List<RightBean.DataBean.ListBean> list){
this.context=context;
this.list=list;
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
MyViewHolder2 myViewHolder2=null;
if (convertView==null){
convertView=View.inflate(context, R.layout.gv_item,null);
ImageView imageView = convertView.findViewById(R.id.gv_pic);
TextView textView = convertView.findViewById(R.id.gv_name);
myViewHolder2= new MyViewHolder2(imageView,textView);
convertView.setTag(myViewHolder2);
}
else {
myViewHolder2= (MyViewHolder2) convertView.getTag();
}
//赋值
myViewHolder2.getGv_tv().setText(list.get(position).getName());
//
Glide.with(context).load(list.get(position).getIcon()).into(myViewHolder2.getGv_pic());
return convertView;
}
class MyViewHolder2{
private ImageView gv_pic;
private TextView gv_tv;
public MyViewHolder2(ImageView gv_pic, TextView gv_tv) {
this.gv_pic = gv_pic;
this.gv_tv = gv_tv;
}
public ImageView getGv_pic() {
return gv_pic;
}
public void setGv_pic(ImageView gv_pic) {
this.gv_pic = gv_pic;
}
public TextView getGv_tv() {
return gv_tv;
}
public void setGv_tv(TextView gv_tv) {
this.gv_tv = gv_tv;
}
}
}
http文件夹
HttpConfig
public class HttpConfig {
public static String left_url = "https://www.zhaoapi.cn/product/getCatagory";
public static String right_url = "https://www.zhaoapi.cn/product/getProductCatagory";
}
HttpUtils
public class HttpUtils {
private static final String TAG = "HttpUtils-----";
private static HttpUtils httpUtils;
private final int SUCCESS = 0;
private final int ERROR = 1;
private MyHandler myHandler = new MyHandler();
private OkLoadListener okLoadListener;
public static HttpUtils getHttpUtils() {
if (httpUtils == null) {
httpUtils = new HttpUtils();
}
return httpUtils;
}
class MyHandler extends Handler {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case SUCCESS:
//成功
String json = (String) msg.obj;
okLoadListener.okLoadSuccess(json);
break;
case ERROR:
//失败
String error = (String) msg.obj;
okLoadListener.okLoadError(error);
break;
}
}
}
//get
public void okGet(String url) {
OkHttpClient okHttpClient = new OkHttpClient.Builder().addInterceptor(new MyIntercepter()).build();
Request request = new Request.Builder().url(url).build();
Call call = okHttpClient.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
Message message = myHandler.obtainMessage();
message.what = ERROR;
message.obj = e.getMessage();
myHandler.sendMessage(message);
}
@Override
public void onResponse(Call call, Response response) throws IOException {
Message message = myHandler.obtainMessage();
message.what = SUCCESS;
message.obj = response.body().string();
myHandler.sendMessage(message);
}
});
}
public void setOkLoadListener(OkLoadListener okLoadListener) {
this.okLoadListener = okLoadListener;
}
//post
public void okPost(String url, Map<String, String> params) {
OkHttpClient okHttpClient = new OkHttpClient.Builder().addInterceptor(new MyIntercepter()).build();
FormBody.Builder builder = new FormBody.Builder();
Set<String> keySet = params.keySet();
for (String key :
keySet) {
String value = params.get(key);
builder.add(key, value);
}
FormBody formBody = builder.build();
Request request = new Request.Builder().url(url).post(formBody).build();
Call call = okHttpClient.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
Message message = myHandler.obtainMessage();
message.what = ERROR;
message.obj = e.getMessage();
myHandler.sendMessage(message);
}
@Override
public void onResponse(Call call, Response response) throws IOException {
Message message = myHandler.obtainMessage();
message.what = SUCCESS;
message.obj = response.body().string();
myHandler.sendMessage(message);
}
});
}
//拦截器
class MyIntercepter implements Interceptor {
//intercept 拦截
@Override
public Response intercept(Chain chain) throws IOException {
//添加公共参数
//post 取出原来所有的参数,将之加到新的请求体里面。然后让请求去执行
Request request = chain.request();
//获取请求方法
String method = request.method();
if (method.equals("GET")) {//---------------------------GET 拦截
//取出url地址
String url = request.url().toString();
//拼接公共参数
boolean contains = url.contains("?");
if (contains) {
url = url + "&source=android";
} else {
url = url + "?source=android";
}
Request request1 = request.newBuilder().url(url).build();
Response response = chain.proceed(request1);
return response;
} else if (method.equals("POST")) {//---------------------POST 拦截
RequestBody body = request.body();//请求体
if (body instanceof FormBody) {
//创建新的请求体
FormBody.Builder newBuilder = new FormBody.Builder();
for (int i = 0; i < ((FormBody) body).size(); i++) {
String key = ((FormBody) body).name(i);
String value = ((FormBody) body).value(i);
newBuilder.add(key, value);
}
//添加公共参数
newBuilder.add("source", "android");
FormBody newBody = newBuilder.build();
//创建新的请求体
Request request1 = request.newBuilder().post(newBody).build();
//去请求
Response response = chain.proceed(request1);
return response;
}
}
return null;
}
}
//上传文件(图片)
public void upLoadImage(String url, String path) {//url 要上传的地址。path 要上传的文件路径
//媒体类型
MediaType mediaType = MediaType.parse("image/*");
//multipartbody
MultipartBody.Builder builder = new MultipartBody.Builder().setType(MultipartBody.FORM);
File file = new File(path);
MultipartBody multipartBody = builder.addFormDataPart("file", file.getName(), RequestBody.create(mediaType, file)).build();
OkHttpClient okHttpClient = new OkHttpClient();
Request request = new Request.Builder().url(url).post(multipartBody).build();
Call call = okHttpClient.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
Log.d(TAG, "上传失败0----: ");
}
@Override
public void onResponse(Call call, Response response) throws IOException {
Log.d(TAG, "上传成功: ");
}
});
}
}
OkLoadListener
public interface OkLoadListener {
void okLoadSuccess(String json);
void okLoadError(String error);
}
model文件夹
DataBean
public class DataBean {
/**
* cid : 1
* list : [{"icon":"http://120.27.23.105/images/icon.png","name":"月饼","pcid":1,"pscid":1},{"icon":"http://120.27.23.105/images/icon.png","name":"坚果炒货","pcid":1,"pscid":2},{"icon":"http://120.27.23.105/images/icon.png","name":"糖巧","pcid":1,"pscid":3},{"icon":"http://120.27.23.105/images/icon.png","name":"休闲零食","pcid":1,"pscid":4},{"icon":"http://120.27.23.105/images/icon.png","name":"肉干肉脯","pcid":1,"pscid":5},{"icon":"http://120.27.23.105/images/icon.png","name":"饼干蛋糕","pcid":1,"pscid":6},{"icon":"http://120.27.23.105/images/icon.png","name":"蜜饯果干","pcid":1,"pscid":7},{"icon":"http://120.27.23.105/images/icon.png","name":"无糖食品","pcid":1,"pscid":8}]
* name : 休闲零食
* pcid : 1
*/
private String cid;
private String name;
private String pcid;
private List<ListBean> list;
public String getCid() {
return cid;
}
public void setCid(String cid) {
this.cid = cid;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPcid() {
return pcid;
}
public void setPcid(String pcid) {
this.pcid = pcid;
}
public List<ListBean> getList() {
return list;
}
public void setList(List<ListBean> list) {
this.list = list;
}
public static class ListBean {
/**
* icon : http://120.27.23.105/images/icon.png
* name : 月饼
* pcid : 1
* pscid : 1
*/
private String icon;
private String name;
private int pcid;
private int pscid;
public String getIcon() {
return icon;
}
public void setIcon(String icon) {
this.icon = icon;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getPcid() {
return pcid;
}
public void setPcid(int pcid) {
this.pcid = pcid;
}
public int getPscid() {
return pscid;
}
public void setPscid(int pscid) {
this.pscid = pscid;
}
}
}
GetLeftListener
public interface GetLeftListener {
void getLeftSuccess(String json);
void getLeftError(String error);
}
GetRightListener
public interface GetRightListener {
void getLeftSuccess(String json);
void getLeftError(String error);
}
IModel
public interface IModel {
//获取左侧列表数据
void getLeftList(String url, Map<String,String> map,GetLeftListener getLeftListener);
//获取右侧列表数据
void getRightList(String url, Map<String,String> map,GetRightListener getRightListener);
}
LeftBean
public class LeftBean {
/**
* msg :
* code : 0
* data : [{"cid":1,"createtime":"2017-10-10T19:41:39","icon":"http://120.27.23.105/images/category/shop.png","ishome":1,"name":"京东超市"},{"cid":2,"createtime":"2017-10-10T19:41:39","icon":"http://120.27.23.105/images/category/qqg.png","ishome":1,"name":"全球购"},{"cid":3,"createtime":"2017-10-10T19:45:11","icon":"http://120.27.23.105/images/category/phone.png","ishome":1,"name":"手机数码"},{"cid":5,"createtime":"2017-10-10T20:12:03","icon":"http://120.27.23.105/images/category/man.png","ishome":1,"name":"男装"},{"cid":6,"createtime":"2017-10-10T20:12:03","icon":"http://120.27.23.105/images/category/girl.png","ishome":1,"name":"女装"},{"cid":7,"createtime":"2017-10-10T20:12:03","icon":"http://120.27.23.105/images/category/manshoe.png","ishome":1,"name":"男鞋"},{"cid":8,"createtime":"2017-10-10T20:12:03","icon":"http://120.27.23.105/images/category/girlshoe.png","ishome":1,"name":"女鞋"},{"cid":9,"createtime":"2017-10-10T20:12:03","icon":"http://120.27.23.105/images/category/shirt.png","ishome":1,"name":"内衣配饰"},{"cid":10,"createtime":"2017-10-10T20:12:03","icon":"http://120.27.23.105/images/category/bag.png","ishome":1,"name":"箱包手袋"},{"cid":11,"createtime":"2017-10-10T20:12:03","icon":"http://120.27.23.105/images/category/beauty.png","ishome":1,"name":"美妆个护"},{"cid":12,"createtime":"2017-10-10T20:12:03","icon":"http://120.27.23.105/images/category/jewel.png","ishome":1,"name":"钟表珠宝"},{"cid":13,"createtime":"2017-10-10T20:12:03","icon":"http://120.27.23.105/images/category/luxury.png","ishome":1,"name":"奢侈品"},{"cid":14,"createtime":"2017-10-10T20:12:03","icon":"http://120.27.23.105/images/category/computer.png","ishome":1,"name":"电脑办公"},{"cid":15,"createtime":"2017-09-29T10:13:48","icon":"http://120.27.23.105/images/icon.png","ishome":0,"name":"家用电器"},{"cid":16,"createtime":"2017-09-29T10:13:48","icon":"http://120.27.23.105/images/icon.png","ishome":0,"name":"食品生鲜"},{"cid":17,"createtime":"2017-09-29T10:13:48","icon":"http://120.27.23.105/images/icon.png","ishome":0,"name":"酒水饮料"},{"cid":18,"createtime":"2017-09-29T10:13:48","icon":"http://120.27.23.105/images/icon.png","ishome":0,"name":"母婴童装"},{"cid":19,"createtime":"2017-09-29T10:13:48","icon":"http://120.27.23.105/images/icon.png","ishome":0,"name":"玩具乐器"},{"cid":20,"createtime":"2017-09-29T10:13:48","icon":"http://120.27.23.105/images/icon.png","ishome":0,"name":"医药保健"}]
*/
private String msg;
private String code;
private List<DataBean> data;
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public List<DataBean> getData() {
return data;
}
public void setData(List<DataBean> data) {
this.data = data;
}
public static class DataBean {
/**
* cid : 1
* createtime : 2017-10-10T19:41:39
* icon : http://120.27.23.105/images/category/shop.png
* ishome : 1
* name : 京东超市
*/
private int cid;
private String createtime;
private String icon;
private int ishome;
private String name;
public int getCid() {
return cid;
}
public void setCid(int cid) {
this.cid = cid;
}
public String getCreatetime() {
return createtime;
}
public void setCreatetime(String createtime) {
this.createtime = createtime;
}
public String getIcon() {
return icon;
}
public void setIcon(String icon) {
this.icon = icon;
}
public int getIshome() {
return ishome;
}
public void setIshome(int ishome) {
this.ishome = ishome;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
}
ModelImpl
public class ModelImpl implements IModel {
private static final String TAG = "ModelImpl----";
//获取左侧数据的实现类
@Override
public void getLeftList(String url, Map<String, String> map, final GetLeftListener getLeftListener) {
HttpUtils httpUtils = HttpUtils.getHttpUtils();
httpUtils.okPost(url,map);
httpUtils.setOkLoadListener(new OkLoadListener() {
@Override
public void okLoadSuccess(String json) {
Log.d(TAG, "okLoadSuccess: "+json);
//回调
getLeftListener.getLeftSuccess(json);
}
@Override
public void okLoadError(String error) {
Log.d(TAG, "失败: "+error);
//回调
getLeftListener.getLeftError(error);
}
});
}
//右侧
@Override
public void getRightList(String url, Map<String, String> map, final GetRightListener getRightListener) {
HttpUtils httpUtils = HttpUtils.getHttpUtils();
httpUtils.okPost(url,map);
httpUtils.setOkLoadListener(new OkLoadListener() {
@Override
public void okLoadSuccess(String json) {
Log.d(TAG, "okLoadSuccess: "+json);
//回调
getRightListener.getLeftSuccess(json);
}
@Override
public void okLoadError(String error) {
Log.d(TAG, "失败: "+error);
//回调
getRightListener.getLeftError(error);
}
});
}
}
RightBean
public class RightBean {
/**
* msg : 获取子分类成功
* code : 0
* data : [{"cid":"1","list":[{"icon":"http://120.27.23.105/images/icon.png","name":"月饼","pcid":1,"pscid":1},{"icon":"http://120.27.23.105/images/icon.png","name":"坚果炒货","pcid":1,"pscid":2},{"icon":"http://120.27.23.105/images/icon.png","name":"糖巧","pcid":1,"pscid":3},{"icon":"http://120.27.23.105/images/icon.png","name":"休闲零食","pcid":1,"pscid":4},{"icon":"http://120.27.23.105/images/icon.png","name":"肉干肉脯","pcid":1,"pscid":5},{"icon":"http://120.27.23.105/images/icon.png","name":"饼干蛋糕","pcid":1,"pscid":6},{"icon":"http://120.27.23.105/images/icon.png","name":"蜜饯果干","pcid":1,"pscid":7},{"icon":"http://120.27.23.105/images/icon.png","name":"无糖食品","pcid":1,"pscid":8}],"name":"休闲零食","pcid":"1"},{"cid":"1","list":[{"icon":"http://120.27.23.105/images/icon.png","name":"新鲜水果","pcid":2,"pscid":9},{"icon":"http://120.27.23.105/images/icon.png","name":"海鲜水产","pcid":2,"pscid":10},{"icon":"http://120.27.23.105/images/icon.png","name":"精选肉类","pcid":2,"pscid":11},{"icon":"http://120.27.23.105/images/icon.png","name":"蛋类","pcid":2,"pscid":12},{"icon":"http://120.27.23.105/images/icon.png","name":"新鲜蔬菜","pcid":2,"pscid":13},{"icon":"http://120.27.23.105/images/icon.png","name":"冷冻食品","pcid":2,"pscid":14},{"icon":"http://120.27.23.105/images/icon.png","name":"饮品甜品","pcid":2,"pscid":15},{"icon":"http://120.27.23.105/images/icon.png","name":"大闸蟹","pcid":2,"pscid":16}],"name":"京东生鲜","pcid":"2"},{"cid":"1","list":[{"icon":"http://120.27.23.105/images/icon.png","name":"大米","pcid":3,"pscid":21},{"icon":"http://120.27.23.105/images/icon.png","name":"面粉","pcid":3,"pscid":22},{"icon":"http://120.27.23.105/images/icon.png","name":"杂粮","pcid":3,"pscid":23},{"icon":"http://120.27.23.105/images/icon.png","name":"食用油","pcid":3,"pscid":24},{"icon":"http://120.27.23.105/images/icon.png","name":"调味品","pcid":3,"pscid":25},{"icon":"http://120.27.23.105/images/icon.png","name":"方便速食","pcid":3,"pscid":26},{"icon":"http://120.27.23.105/images/icon.png","name":"有机食品","pcid":3,"pscid":27}],"name":"粮油调味","pcid":"3"},{"cid":"1","list":[{"icon":"http://120.27.23.105/images/icon.png","name":"饮用水","pcid":4,"pscid":28},{"icon":"http://120.27.23.105/images/icon.png","name":"饮料","pcid":4,"pscid":29},{"icon":"http://120.27.23.105/images/icon.png","name":"牛奶乳品","pcid":4,"pscid":30},{"icon":"http://120.27.23.105/images/icon.png","name":"名茶","pcid":4,"pscid":31},{"icon":"http://120.27.23.105/images/icon.png","name":"蜂蜜","pcid":4,"pscid":32}],"name":"水饮茗茶","pcid":"4"},{"cid":"1","list":[{"icon":"http://120.27.23.105/images/icon.png","name":"白酒","pcid":5,"pscid":33},{"icon":"http://120.27.23.105/images/icon.png","name":"葡萄酒","pcid":5,"pscid":34},{"icon":"http://120.27.23.105/images/icon.png","name":"洋酒","pcid":5,"pscid":35},{"icon":"http://120.27.23.105/images/icon.png","name":"啤酒","pcid":5,"pscid":36},{"icon":"http://120.27.23.105/images/icon.png","name":"黄酒","pcid":5,"pscid":37},{"icon":"http://120.27.23.105/images/icon.png","name":"陈年老酒","pcid":5,"pscid":38}],"name":"中外名酒","pcid":"5"}]
*/
private String msg;
private String code;
private List<DataBean> data;
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public List<DataBean> getData() {
return data;
}
public void setData(List<DataBean> data) {
this.data = data;
}
public static class DataBean {
/**
* cid : 1
* list : [{"icon":"http://120.27.23.105/images/icon.png","name":"月饼","pcid":1,"pscid":1},{"icon":"http://120.27.23.105/images/icon.png","name":"坚果炒货","pcid":1,"pscid":2},{"icon":"http://120.27.23.105/images/icon.png","name":"糖巧","pcid":1,"pscid":3},{"icon":"http://120.27.23.105/images/icon.png","name":"休闲零食","pcid":1,"pscid":4},{"icon":"http://120.27.23.105/images/icon.png","name":"肉干肉脯","pcid":1,"pscid":5},{"icon":"http://120.27.23.105/images/icon.png","name":"饼干蛋糕","pcid":1,"pscid":6},{"icon":"http://120.27.23.105/images/icon.png","name":"蜜饯果干","pcid":1,"pscid":7},{"icon":"http://120.27.23.105/images/icon.png","name":"无糖食品","pcid":1,"pscid":8}]
* name : 休闲零食
* pcid : 1
*/
private String cid;
private String name;
private String pcid;
private List<ListBean> list;
public String getCid() {
return cid;
}
public void setCid(String cid) {
this.cid = cid;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPcid() {
return pcid;
}
public void setPcid(String pcid) {
this.pcid = pcid;
}
public List<ListBean> getList() {
return list;
}
public void setList(List<ListBean> list) {
this.list = list;
}
public static class ListBean {
/**
* icon : http://120.27.23.105/images/icon.png
* name : 月饼
* pcid : 1
* pscid : 1
*/
private String icon;
private String name;
private int pcid;
private int pscid;
public String getIcon() {
return icon;
}
public void setIcon(String icon) {
this.icon = icon;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getPcid() {
return pcid;
}
public void setPcid(int pcid) {
this.pcid = pcid;
}
public int getPscid() {
return pscid;
}
public void setPscid(int pscid) {
this.pscid = pscid;
}
}
}
}
presenter文件夹
IPresenter
public interface IPresenter {
//显示左侧列表
void showLeftToView(IModel iModel, IMainView iMainView);
//显示右侧列表
void showRightToView(IModel iModel, IMainView iMainView);
}
Presenter
public class Presenter implements IPresenter {
private static final String TAG = "Presenter";
//显示左侧列表
@Override
public void showLeftToView(IModel iModel, final IMainView iMainView) {
Map<String, String> map = new HashMap<>();
iModel.getLeftList(HttpConfig.left_url, map, new GetLeftListener() {
@Override
public void getLeftSuccess(String json) {
//解析
Gson gson = new Gson();
LeftBean leftBean = gson.fromJson(json, LeftBean.class);
if (leftBean.getCode().equals("0")) {
iMainView.showLeftView(leftBean.getData());
} else {
Log.d(TAG, "失败" + json);
}
}
@Override
public void getLeftError(String error) {
Log.d(TAG, "getLeftError: " + error);
}
});
}
//右侧
@Override
public void showRightToView(IModel iModel, final IMainView iMainView) {
Map<String, String> map = new HashMap<>();
map.put("cid",iMainView.getCid());
iModel.getRightList(HttpConfig.right_url, map, new GetRightListener() {
@Override
public void getLeftSuccess(String json) {
//解析
Gson gson = new Gson();
RightBean rightBean = gson.fromJson(json, RightBean.class);
if (rightBean.getCode().equals("0")) {
iMainView.showRightView(rightBean.getData());
} else {
Log.d(TAG, "失败" + json);
}
}
@Override
public void getLeftError(String error) {
Log.d(TAG, "getLeftError: " + error);
}
});
}
}
view文件夹
IMainView
public interface IMainView {
//显示左侧列表
void showLeftView(List<LeftBean.DataBean> list);
//显示右侧
void showRightView(List<RightBean.DataBean> list);
//获取分类的cid
String getCid();
}
MyGridView
public class MyGridView extends GridView {
public MyGridView(Context context) {
super(context);
}
public MyGridView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MyGridView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int i = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, i);
}
}
MainActivity
public class MainActivity extends AppCompatActivity implements IMainView{
private static final String TAG = "MainActivity";
private ListView left_listview;
private ListView right_listview;
private List<LeftBean.DataBean> list;
private String cid;
private Presenter presenter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initViews();
initDatas();
}
private void initDatas() {
presenter = new Presenter();
presenter.showLeftToView(new ModelImpl(),this);
}
private void initViews() {
left_listview = findViewById(R.id.left_listview);
right_listview = findViewById(R.id.right_listview);
//设置条目点击事件
left_listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
MainActivity.this.cid = list.get(position).getCid() + "";
//调用p层的方法
presenter.showRightToView(new ModelImpl(),MainActivity.this);
}
});
}
//显示左侧列表
@Override
public void showLeftView(List<LeftBean.DataBean> list) {
this.list=list;
Log.d(TAG, "showLeftView: "+list);
MyAdapter1 myAdapter1 = new MyAdapter1(this, list);
left_listview.setAdapter(myAdapter1);
//显示右侧的默认值,就是cid=1
int cid = list.get(0).getCid();
MainActivity.this.cid=cid+"";
presenter.showRightToView(new ModelImpl(),MainActivity.this);
}
//右侧
@Override
public void showRightView(List<RightBean.DataBean> list) {
Log.d(TAG, "右侧------: "+list);
MyAdapter2 myAdapter2 = new MyAdapter2(this, list);
right_listview.setAdapter(myAdapter2);
}
@Override
public String getCid() {
return this.cid;
}
}