仿JD分类

//依赖

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>





猜你喜欢

转载自blog.csdn.net/qq_41212790/article/details/80170788