-------------HttpUtils.java
package com.bwie.xiaqin.yuekao112102lx.fen.utils; import android.os.Handler; import com.bwie.xiaqin.yuekao112102lx.fen.inter.ICallBack; import com.google.gson.Gson; import java.io.IOException; import java.lang.reflect.Type; import okhttp3.Call; import okhttp3.Callback; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; /** * Created by lenovo on 2018/11/22. */ public class HttpUtils { private static volatile HttpUtils instance; private OkHttpClient client; private Handler handler = new Handler(); public HttpUtils(){ client = new OkHttpClient(); } public static HttpUtils getInstance(){ if (instance == null){ synchronized (HttpUtils.class){ if (null == instance){ instance = new HttpUtils(); } } } return instance; }; public void get(String url, final ICallBack callBack, final Type type){ Request request = new Request.Builder().get().url(url).build(); Call call = client.newCall(request); call.enqueue(new Callback() { @Override public void onFailure(Call call, final IOException e) { handler.post(new Runnable() { @Override public void run() { callBack.onFailed(e); } }); } @Override public void onResponse(Call call, Response response) throws IOException { String result = response.body().string(); Gson gson = new Gson(); final Object o = gson.fromJson(result, type); handler.post(new Runnable() { @Override public void run() { callBack.onSuccess(o); } }); } }); } }
--------------------ICallBack.java
package com.bwie.xiaqin.yuekao112102lx.fen.inter; /** * Created by lenovo on 2018/11/22. */ public interface ICallBack { void onSuccess(Object obj); void onFailed(Exception e); }
--------------bean.java 前者 FenLeftBean.java FenRightBean.java
package com.bwie.xiaqin.yuekao112102lx.bean; import java.util.List; /** * Created by lenovo on 2018/11/22. */ public class FenLeftBean { /** * 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; } } }
package com.bwie.xiaqin.yuekao112102lx.bean; import java.util.List; /** * Created by lenovo on 2018/11/22. */ public class FenRightBean { /** * msg : 获取子分类成功 * code : 0 * data : [{"cid":"3","list":[{"icon":"http://120.27.23.105/images/icon.png","name":"耳机/耳麦","pcid":10,"pscid":61},{"icon":"http://120.27.23.105/images/icon.png","name":"音箱/音响","pcid":10,"pscid":62},{"icon":"http://120.27.23.105/images/icon.png","name":"MP3/MP4","pcid":10,"pscid":63},{"icon":"http://120.27.23.105/images/icon.png","name":"便携/无线音箱","pcid":10,"pscid":64},{"icon":"http://120.27.23.105/images/icon.png","name":"麦克风","pcid":10,"pscid":65}],"name":"影音娱乐","pcid":"10"},{"cid":"3","list":[{"icon":"http://120.27.23.105/images/icon.png","name":"游戏手机","pcid":11,"pscid":66},{"icon":"http://120.27.23.105/images/icon.png","name":"拍照手机","pcid":11,"pscid":67},{"icon":"http://120.27.23.105/images/icon.png","name":"大屏手机","pcid":11,"pscid":68},{"icon":"http://120.27.23.105/images/icon.png","name":"老人机","pcid":11,"pscid":69},{"icon":"http://120.27.23.105/images/icon.png","name":"对讲机","pcid":11,"pscid":70}],"name":"手机通讯","pcid":"11"},{"cid":"3","list":[{"icon":"http://120.27.23.105/images/icon.png","name":"蓝牙耳机","pcid":12,"pscid":71},{"icon":"http://120.27.23.105/images/icon.png","name":"移动电源","pcid":12,"pscid":72},{"icon":"http://120.27.23.105/images/icon.png","name":"苹果周边","pcid":12,"pscid":73},{"icon":"http://120.27.23.105/images/icon.png","name":"手机耳机","pcid":12,"pscid":74},{"icon":"http://120.27.23.105/images/icon.png","name":"充电器","pcid":12,"pscid":75},{"icon":"http://120.27.23.105/images/icon.png","name":"数据线","pcid":12,"pscid":76},{"icon":"http://120.27.23.105/images/icon.png","name":"手机电池","pcid":12,"pscid":77},{"icon":"http://120.27.23.105/images/icon.png","name":"保护套","pcid":12,"pscid":78}],"name":"手机配件","pcid":"12"},{"cid":"3","list":[{"icon":"http://120.27.23.105/images/icon.png","name":"单反相机","pcid":13,"pscid":79},{"icon":"http://120.27.23.105/images/icon.png","name":"单电/微单相机","pcid":13,"pscid":80},{"icon":"http://120.27.23.105/images/icon.png","name":"拍立得","pcid":13,"pscid":81},{"icon":"http://120.27.23.105/images/icon.png","name":"数码相机","pcid":13,"pscid":82},{"icon":"http://120.27.23.105/images/icon.png","name":"摄像机","pcid":13,"pscid":83},{"icon":"http://120.27.23.105/images/icon.png","name":"镜头","pcid":13,"pscid":84}],"name":"摄影摄像","pcid":"13"}] */ 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 : 3 * list : [{"icon":"http://120.27.23.105/images/icon.png","name":"耳机/耳麦","pcid":10,"pscid":61},{"icon":"http://120.27.23.105/images/icon.png","name":"音箱/音响","pcid":10,"pscid":62},{"icon":"http://120.27.23.105/images/icon.png","name":"MP3/MP4","pcid":10,"pscid":63},{"icon":"http://120.27.23.105/images/icon.png","name":"便携/无线音箱","pcid":10,"pscid":64},{"icon":"http://120.27.23.105/images/icon.png","name":"麦克风","pcid":10,"pscid":65}] * name : 影音娱乐 * pcid : 10 */ 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 : 10 * pscid : 61 */ 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; } } } }
-------------adapter FenLeftAdapter.java FenRightAdapter.java
package com.bwie.xiaqin.yuekao112102lx.adapter; import android.content.Context; import android.support.annotation.NonNull; import android.support.v7.widget.RecyclerView; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.TextView; import com.bwie.xiaqin.yuekao112102lx.R; import com.bwie.xiaqin.yuekao112102lx.bean.FenLeftBean; import java.util.List; /** * Created by lenovo on 2018/11/22. */ public class FenLeftAdapter extends RecyclerView.Adapter<FenLeftAdapter.ViewHolder> { private Context context; private List<FenLeftBean.DataBean> list; public FenLeftAdapter(Context context, List<FenLeftBean.DataBean> list) { this.context = context; this.list = list; } public interface OnItemClickListener{ void onItemClick(View itemview,int position); } private OnItemClickListener clickListener; public void setOnItemClickListener(OnItemClickListener clickListener){ this.clickListener = clickListener; } @NonNull @Override public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View view = View.inflate(context, R.layout.fen_item_left, null); FenLeftAdapter.ViewHolder holder = new ViewHolder(view); return holder; } @Override public void onBindViewHolder(@NonNull ViewHolder holder, final int position) { holder.txtleft.setText(list.get(position).getName()); holder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (clickListener!=null){ clickListener.onItemClick(v,position); } } }); } @Override public int getItemCount() { return list.size(); } class ViewHolder extends RecyclerView.ViewHolder{ private TextView txtleft; public ViewHolder(View itemView) { super(itemView); txtleft=itemView.findViewById(R.id.txt_left); } } }
package com.bwie.xiaqin.yuekao112102lx.adapter; import android.content.Context; import android.support.annotation.NonNull; import android.support.v7.widget.RecyclerView; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; import com.bumptech.glide.Glide; import com.bwie.xiaqin.yuekao112102lx.R; import com.bwie.xiaqin.yuekao112102lx.bean.FenRightBean; import java.util.List; /** * Created by lenovo on 2018/11/22. */ public class RightAdapter extends RecyclerView.Adapter<RightAdapter.ViewHolder>{ private Context context; private List<FenRightBean.DataBean.ListBean> list; public RightAdapter(Context context, List<FenRightBean.DataBean.ListBean> list) { this.context = context; this.list = list; } @NonNull @Override public RightAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View view = View.inflate(context, R.layout.fen_item_right,null); ViewHolder holder = new ViewHolder(view); return holder; } @Override public void onBindViewHolder(@NonNull RightAdapter.ViewHolder holder, int position) { Glide.with(context).load(list.get(position).getIcon()).into(holder.imageright); holder.textright.setText(list.get(position).getName()); } @Override public int getItemCount() { return list.size(); } class ViewHolder extends RecyclerView.ViewHolder{ private ImageView imageright; private TextView textright; public ViewHolder(View itemview){ super(itemview); imageright = itemview.findViewById(R.id.img_right); textright = itemview.findViewById(R.id.txt_right); } } }
--------------------adapter xml fen_item_left fen_item_right 先前者
<?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/txt_left" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="haha" android:textSize="20dp" android:padding="10dp" /> </LinearLayout>
<?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" > <ImageView android:id="@+id/img_right" android:layout_width="75dp" android:layout_height="75dp" android:padding="10dp" /> <TextView android:id="@+id/txt_right" android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="10dp" /> </LinearLayout>
----------------------------之后是左边的mvp view model presenter
--------LeftIView.java
package com.bwie.xiaqin.yuekao112102lx.fen.left.view; import com.bwie.xiaqin.yuekao112102lx.bean.FenLeftBean; import java.util.List; /** * Created by lenovo on 2018/11/22. */ public interface LeftIView { void getleft(List<FenLeftBean.DataBean> list); void failed(Exception e); }
----------LeftModel.java
package com.bwie.xiaqin.yuekao112102lx.fen.left.model; import com.bwie.xiaqin.yuekao112102lx.fen.inter.ICallBack; import com.bwie.xiaqin.yuekao112102lx.fen.utils.HttpUtils; import java.lang.reflect.Type; /** * Created by lenovo on 2018/11/22. */ public class LeftModel { public void getlefts(String url, ICallBack callBack, Type type){ HttpUtils.getInstance().get(url,callBack,type); } }
--------------LeftPresenter.java
package com.bwie.xiaqin.yuekao112102lx.fen.left.presenter; import com.bwie.xiaqin.yuekao112102lx.bean.FenLeftBean; import com.bwie.xiaqin.yuekao112102lx.fen.inter.ICallBack; import com.bwie.xiaqin.yuekao112102lx.fen.left.model.LeftModel; import com.bwie.xiaqin.yuekao112102lx.fen.left.view.LeftIView; import com.google.gson.reflect.TypeToken; import java.lang.reflect.Type; /** * Created by lenovo on 2018/11/22. */ public class LeftPresenter { private LeftIView iv; private LeftModel leftmodel; public void attch(final LeftIView iv){ this.iv = iv; leftmodel = new LeftModel(); } public void getleft(){ Type type = new TypeToken<FenLeftBean>(){}.getType(); leftmodel.getlefts("http://www.zhaoapi.cn/product/getCatagory", new ICallBack() { @Override public void onSuccess(Object obj) { FenLeftBean leftBean = (FenLeftBean) obj; if (leftBean!=null){ iv.getleft(leftBean.getData()); } } @Override public void onFailed(Exception e) { iv.failed(e); } },type); } public void detach(){ if (iv!=null){ iv = null; } } }
--------------------之后是右面的 right view model presenter
------------RightIView.java
package com.bwie.xiaqin.yuekao112102lx.fen.right.view; import com.bwie.xiaqin.yuekao112102lx.bean.FenRightBean; import java.util.List; /** * Created by lenovo on 2018/11/22. */ public interface RightIView { void getrights(List<FenRightBean.DataBean> list); void failed(Exception e); }
-----------RightModel.java
package com.bwie.xiaqin.yuekao112102lx.fen.right.model; import com.bwie.xiaqin.yuekao112102lx.fen.inter.ICallBack; import com.bwie.xiaqin.yuekao112102lx.fen.utils.HttpUtils; import java.lang.reflect.Type; /** * Created by lenovo on 2018/11/22. */ public class RightModel { public void getrights(String url, ICallBack callBack, Type type){ HttpUtils.getInstance().get(url,callBack,type); } }
------------RightPresenter.java
package com.bwie.xiaqin.yuekao112102lx.fen.right.presenter; import com.bwie.xiaqin.yuekao112102lx.bean.FenRightBean; import com.bwie.xiaqin.yuekao112102lx.fen.inter.ICallBack; import com.bwie.xiaqin.yuekao112102lx.fen.right.model.RightModel; import com.bwie.xiaqin.yuekao112102lx.fen.right.view.RightIView; import com.bwie.xiaqin.yuekao112102lx.fragment.FenFragment; import com.google.gson.reflect.TypeToken; import java.lang.reflect.Type; /** * Created by lenovo on 2018/11/22. */ public class RightPresenter { private RightIView iv; private RightModel rightModel; public void attch(FenFragment iv){ this.iv = iv; rightModel = new RightModel(); } public void getright(String url){ Type type = new TypeToken<FenRightBean>(){}.getType(); rightModel.getrights(url, new ICallBack() { @Override public void onSuccess(Object obj) { FenRightBean rightBean = (FenRightBean) obj; if (rightBean!=null){ iv.getrights(rightBean.getData()); } } @Override public void onFailed(Exception e) { iv.failed(e); } },type); } public void detach(){ if (iv !=null){ iv = null; } } }
----------------------------------------之后是主页面
--------------首先xml fen_fragment.xml
<?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.bwie.xiaqin.yuekao112102lx.fragment.FenFragment"> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" > <android.support.v7.widget.RecyclerView android:id="@+id/rec_left" android:layout_width="wrap_content" android:layout_height="wrap_content" ></android.support.v7.widget.RecyclerView> </LinearLayout> <ScrollView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="30dp" > <LinearLayout android:id="@+id/right_lnl" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" android:layout_marginLeft="20dp" ></LinearLayout> </ScrollView> </LinearLayout>
------------------------主页面 FenFragment.java
package com.bwie.xiaqin.yuekao112102lx.fragment; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.support.v7.widget.GridLayoutManager; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.LinearLayout; import android.widget.TextView; import com.bwie.xiaqin.yuekao112102lx.R; import com.bwie.xiaqin.yuekao112102lx.adapter.FenLeftAdapter; import com.bwie.xiaqin.yuekao112102lx.adapter.RightAdapter; import com.bwie.xiaqin.yuekao112102lx.bean.FenLeftBean; import com.bwie.xiaqin.yuekao112102lx.bean.FenRightBean; import com.bwie.xiaqin.yuekao112102lx.fen.left.presenter.LeftPresenter; import com.bwie.xiaqin.yuekao112102lx.fen.left.view.LeftIView; import com.bwie.xiaqin.yuekao112102lx.fen.right.presenter.RightPresenter; import com.bwie.xiaqin.yuekao112102lx.fen.right.view.RightIView; import java.util.ArrayList; import java.util.List; public class FenFragment extends Fragment implements LeftIView,RightIView{ private RecyclerView recleft; private FenLeftAdapter leftAdapter; private List<FenLeftBean.DataBean> beanList; private LeftPresenter leftPresenter; private LinearLayout layoutright; private RightAdapter rightAdapter; private RightPresenter rightPresenter; private List<FenRightBean.DataBean> beanright; @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fen_fragment, container, false); recleft = view.findViewById(R.id.rec_left); layoutright = view.findViewById(R.id.right_lnl); return view; } @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); RecyclerView.LayoutManager layoutManager = new GridLayoutManager(getActivity(), 1, LinearLayoutManager.VERTICAL, false); recleft.setLayoutManager(layoutManager); beanList = new ArrayList<>(); beanright = new ArrayList<>(); leftAdapter = new FenLeftAdapter(getActivity(), beanList); leftAdapter.setOnItemClickListener(new FenLeftAdapter.OnItemClickListener() { @Override public void onItemClick(View itemview, int position) { FenLeftBean.DataBean dataBean = beanList.get(position); rightPresenter.getright("http://www.zhaoapi.cn/product/getProductCatagory?cid="+dataBean.getCid()); } }); recleft.setAdapter(leftAdapter); leftPresenter = new LeftPresenter(); leftPresenter.attch(this); leftPresenter.getleft(); rightPresenter = new RightPresenter(); rightPresenter.attch(this); } @Override public void getleft(List<FenLeftBean.DataBean> list) { if (list!=null){ beanList.clear(); beanList.addAll(list); leftAdapter.notifyDataSetChanged(); } } @Override public void getrights(List<FenRightBean.DataBean> list) { if (list!=null){ layoutright.removeAllViews(); for (int i=0;i<list.size();i++){ TextView textView = new TextView(getActivity()); textView.setText(list.get(i).getName()); RecyclerView rvNextb = new RecyclerView(getActivity()); RecyclerView.LayoutManager layoutManager2 = new GridLayoutManager(getActivity(), 3); rvNextb.setLayoutManager(layoutManager2); rightAdapter = new RightAdapter(getActivity(), list.get(i).getList()); rvNextb.setAdapter(rightAdapter); beanright.clear(); beanright.addAll(list); rightAdapter.notifyDataSetChanged(); layoutright.addView(textView); layoutright.addView(rvNextb); } } } @Override public void failed(Exception e) { } @Override public void onDestroy() { super.onDestroy(); if (leftPresenter!=null){ leftPresenter.detach(); } } @Override public void onResume() { super.onResume(); rightPresenter.getright("http://www.zhaoapi.cn/product/getProductCatagory?cid=1"); } }