//依赖
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'
adapters 包
MyAdapter1
package com.daydayup.day16_fenlei.adapters; import android.content.Context; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.TextView; import com.daydayup.day16_fenlei.R; import com.daydayup.day16_fenlei.model.LeftBean; import java.util.List; /** * Created by gjl on 2018/4/29. */ 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
package com.daydayup.day16_fenlei.adapters; import android.content.Context; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.BaseAdapter; import android.widget.GridView; import android.widget.TextView; import android.widget.Toast; import com.daydayup.day16_fenlei.R; import com.daydayup.day16_fenlei.model.LeftBean; import com.daydayup.day16_fenlei.model.RightBean; import java.util.List; /** * Created by gjl on 2018/4/29. */ 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
package com.daydayup.day16_fenlei.adapters; import android.content.Context; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.TextView; import com.bumptech.glide.Glide; import com.daydayup.day16_fenlei.R; import com.daydayup.day16_fenlei.model.DataBean; import com.daydayup.day16_fenlei.model.RightBean; import java.util.List; /** * GridView的适配器 */ 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
package com.daydayup.day16_fenlei.http; /** * Created by gjl on 2018/4/29. */ 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
package com.daydayup.day16_fenlei.http; import android.os.Handler; import android.os.Message; import android.util.Log; import java.io.File; import java.io.IOException; import java.util.Map; import java.util.Set; import okhttp3.Call; import okhttp3.Callback; import okhttp3.FormBody; import okhttp3.Interceptor; import okhttp3.MediaType; import okhttp3.MultipartBody; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.RequestBody; import okhttp3.Response; /** * Created by gjl on 2018/4/18. */ 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
package com.daydayup.day16_fenlei.http; /** * Created by gjl on 2018/4/29. */ public interface OkLoadListener { void okLoadSuccess(String json); void okLoadError(String error); }
model 包
DataBean
package com.daydayup.day16_fenlei.model; import java.util.List; /** * Created by gjl on 2018/4/29. */ 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
package com.daydayup.day16_fenlei.model; /** * Created by gjl on 2018/4/29. */ public interface GetLeftListener { void getLeftSuccess(String json); void getLeftError(String error); }
GetRightListener
package com.daydayup.day16_fenlei.model; /** * Created by gjl on 2018/4/29. */ public interface GetRightListener { void getLeftSuccess(String json); void getLeftError(String error); }
IModel
package com.daydayup.day16_fenlei.model; import java.util.Map; /** * Created by gjl on 2018/4/29. */ public interface IModel { //获取左侧列表数据 void getLeftList(String url, Map<String,String> map,GetLeftListener getLeftListener); //获取右侧列表数据 void getRightList(String url, Map<String,String> map,GetRightListener getRightListener); }
LeftBean
package com.daydayup.day16_fenlei.model; import java.util.List; /** * Created by gjl on 2018/4/29. */ 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
package com.daydayup.day16_fenlei.model; import android.util.Log; import com.daydayup.day16_fenlei.http.HttpUtils; import com.daydayup.day16_fenlei.http.OkLoadListener; import java.util.Map; /** * Created by gjl on 2018/4/29. */ 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
package com.daydayup.day16_fenlei.model; import java.util.List; /** * Created by gjl on 2018/4/29. */ 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
package com.daydayup.day16_fenlei.presenter; import com.daydayup.day16_fenlei.model.IModel; import com.daydayup.day16_fenlei.view.IMainView; /** * Created by gjl on 2018/4/29. */ public interface IPresenter { //显示左侧列表 void showLeftToView(IModel iModel, IMainView iMainView); //显示右侧列表 void showRightToView(IModel iModel, IMainView iMainView); }
Presenter
package com.daydayup.day16_fenlei.presenter; import android.util.Log; import com.daydayup.day16_fenlei.http.HttpConfig; import com.daydayup.day16_fenlei.model.GetLeftListener; import com.daydayup.day16_fenlei.model.GetRightListener; import com.daydayup.day16_fenlei.model.IModel; import com.daydayup.day16_fenlei.model.LeftBean; import com.daydayup.day16_fenlei.model.RightBean; import com.daydayup.day16_fenlei.view.IMainView; import com.google.gson.Gson; import java.util.HashMap; import java.util.Map; /** * Created by gjl on 2018/4/29. */ 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
package com.daydayup.day16_fenlei.view; import com.daydayup.day16_fenlei.model.LeftBean; import com.daydayup.day16_fenlei.model.RightBean; import java.util.List; /** * Created by gjl on 2018/4/29. */ public interface IMainView { //显示左侧列表 void showLeftView(List<LeftBean.DataBean> list); //显示右侧 void showRightView(List<RightBean.DataBean> list); //获取分类的cid String getCid(); }
MainActivity
package com.daydayup.day16_fenlei.view; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.AdapterView; import android.widget.ListView; import com.daydayup.day16_fenlei.R; import com.daydayup.day16_fenlei.adapters.MyAdapter1; import com.daydayup.day16_fenlei.adapters.MyAdapter2; import com.daydayup.day16_fenlei.model.LeftBean; import com.daydayup.day16_fenlei.model.ModelImpl; import com.daydayup.day16_fenlei.model.RightBean; import com.daydayup.day16_fenlei.presenter.Presenter; import java.util.List; 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; } }
MyGridView
package com.daydayup.day16_fenlei.view; import android.content.Context; import android.util.AttributeSet; import android.widget.GridView; /** * Created by gjl on 2018/4/29. */ 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); } }
布局
activity_main
<?xml version="1.0" encoding="utf-8"?> <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>
gv_item
<?xml version="1.0" encoding="utf-8"?> <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
<?xml version="1.0" encoding="utf-8"?> <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
<?xml version="1.0" encoding="utf-8"?> <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>