添加依赖--和 --网络权限(自己添加)
compile 'com.android.support:appcompat-v7:26.+'
compile 'com.android.support.constraint:constraint-layout:1.0.2'
testCompile 'junit:junit:4.12'
compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
compile 'io.reactivex.rxjava2:rxjava:2.1.7'
compile 'com.squareup.retrofit2:adapter-rxjava2:2.3.0'
compile 'com.squareup.retrofit2:retrofit:2.0.2'
// Retrofit库
compile 'com.squareup.okhttp3:okhttp:3.1.2'
// Okhttp库
compile 'com.squareup.retrofit2:converter-gson:2.0.2'
compile 'com.facebook.fresco:fresco:0.12.0'
compile 'com.android.support:recyclerview-v7:26.0.0-alpha1'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
compile 'com.jakewharton:butterknife:8.8.1'
主布局文件
<android.support.v7.widget.RecyclerView
android:layout_width="100dp"
android:layout_height="match_parent"
android:id="@+id/recycler"
></android.support.v7.widget.RecyclerView>
<android.support.v7.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginLeft="100dp"
android:id="@+id/recycler2"
></android.support.v7.widget.RecyclerView>
创建item.xml文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/tv"
android:textSize="20sp"
android:layout_weight="2"
android:text="哈哈啊哈哈"
/>
</LinearLayout>
创建 leftitem.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="Textview"
android:id="@+id/tv2"
/>
</LinearLayout>
<android.support.v7.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/recycler3"
></android.support.v7.widget.RecyclerView>
</LinearLayout>
创建 leftitem2.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<com.facebook.drawee.view.SimpleDraweeView
android:layout_width="50dp"
android:layout_height="50dp"
android:id="@+id/simpl"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/tv3"
/>
</LinearLayout>
创建三个适配器
MyAdapter类
public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private Context context;
private Bean bean;
public MyAdapter(Context context, Bean bean) {
this.context = context;
this.bean = bean;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = View.inflate(context, R.layout.item, null);
ViewHolder holder=new ViewHolder(view);
return holder;
}
@Override
public void onBindViewHolder(final RecyclerView.ViewHolder holder, int position) {
final ViewHolder viewHolder=(ViewHolder)holder;
if(onItemClickLinster!=null){
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
int pos = holder.getLayoutPosition();
onItemClickLinster.OnItemClickLinser(view,pos);
onItemClickLinster.OnItemLongClickLinser(view,pos);
}
});
}
viewHolder.tv.setText(this.bean.getData().get(position).getName());
}
@Override
public int getItemCount() {
return bean.getData().size();
}
static class ViewHolder extends RecyclerView.ViewHolder {
@BindView(R.id.tv)
TextView tv;
ViewHolder(View view) {
super(view);
ButterKnife.bind(this, view);
}
}
public interface OnItemClickLinster{
void OnItemClickLinser(View v, int pos);
void OnItemLongClickLinser(View v, int pos);
}
private OnItemClickLinster onItemClickLinster;
public void setOnItemClickLinster(OnItemClickLinster onItemClickLinster) {
this.onItemClickLinster = onItemClickLinster;
}
}
创建
LeftAdpter类
public class LeftAdpter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private Context context;
private LeftBean bean;
public LeftAdpter(Context context, LeftBean bean) {
this.context = context;
this.bean = bean;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = View.inflate(context, R.layout.leftitem, null);
ViewHolder holder = new ViewHolder(view);
return holder;
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
ViewHolder viewHolder = (ViewHolder) holder;
viewHolder.tv2.setText(bean.getData().get(position).getName());
viewHolder.recycler3.setLayoutManager(new GridLayoutManager(context,4));
LeftAdapter2 adapter2=new LeftAdapter2(context,bean.getData().get(position).getList());
viewHolder.recycler3.setAdapter(adapter2);
}
@Override
public int getItemCount() {
return bean.getData().size();
}
static class ViewHolder extends RecyclerView.ViewHolder {
@BindView(R.id.tv2)
TextView tv2;
@BindView(R.id.recycler3)
RecyclerView recycler3;
ViewHolder(View view) {
super(view);
ButterKnife.bind(this, view);
}
}
}
创建
LeftAdapter2类
public class LeftAdapter2 extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private Context context;
private List<LeftBean.DataBean.ListBean> bean;
public LeftAdapter2(Context context, List<LeftBean.DataBean.ListBean> bean) {
this.context = context;
this.bean = bean;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = View.inflate(context, R.layout.leftitem2, null);
ViewHolder holder=new ViewHolder(view);
return holder;
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
ViewHolder viewHolder=(ViewHolder)holder;
viewHolder.simpl.setImageURI(bean.get(position).getIcon());
viewHolder.tv3.setText(bean.get(position).getName());
}
@Override
public int getItemCount() {
return bean.size();
}
static class ViewHolder extends RecyclerView.ViewHolder {
@BindView(R.id.simpl)
SimpleDraweeView simpl;
@BindView(R.id.tv3)
TextView tv3;
ViewHolder(View view) {
super(view);
ButterKnife.bind(this, view);
}
}
}
创建model包
创建getModel接口
public interface getModel {
public void getData(Finish finish);
}
创建
getModel2接口
public interface getModel2 {
public void getData2(LeftFinish leftfinish, String cid);
}
创建
getModelImpl
public class getModelImpl implements getModel{
@Override
public void getData(final Finish finish) {
Retrofit retrofit=new Retrofit.Builder()
.baseUrl(UtilsURL.HOST_URL)
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.build();
ServiceAPI serviceAPI = retrofit.create(ServiceAPI.class);
Flowable<Bean> bean = serviceAPI.bean();
bean.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<Bean>() {
@Override
public void accept(Bean bean) throws Exception {
finish.onfinish(bean);
}
});
}
}
创建
getModelImpl2类
public class getModelImpl2 implements getModel2{
@Override
public void getData2(final LeftFinish leftfinish, String cid) {
Retrofit retrofit=new Retrofit.Builder()
.baseUrl(UtilsURL.HOST_URL)
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.build();
ServiceAPI serviceAPI = retrofit.create(ServiceAPI.class);
Flowable<LeftBean> leftbean = serviceAPI.leftbean(cid);
leftbean.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<LeftBean>() {
@Override
public void accept(LeftBean bean) throws Exception {
leftfinish.finish2(bean);
}
});
}
}
创建p包
创建
getpersenter接口
public interface getpersenter {
public void guanlian();
}
创建
getpersenter2接口
public interface getpersenter2 {
public void guanlian2(String cid);
}
创建
getpersenterImpl类
public class getpersenterImpl implements getpersenter,Finish {
private final getModel m;
getView view;
public getpersenterImpl(getView view) {
this.view = view;
m=new getModelImpl();
}
@Override
public void guanlian() {
m.getData(this);
}
@Override
public void onfinish(Bean bean) {
view.ShowData(bean);
}
}
创建
getpersenterImpl2类
public class getpersenterImpl2 implements getpersenter2,LeftFinish {
private final getModel2 model2;
getView view;
public getpersenterImpl2(getView view) {
this.view = view;
model2=new getModelImpl2();
}
@Override
public void guanlian2(String cid) {
model2.getData2(this,view.cid());
}
@Override
public void finish2(LeftBean bean) {
view.ShowData2(bean);
}
}
创建utils包
创建
App类
public class App extends Application{
@Override
public void onCreate() {
super.onCreate();
Fresco.initialize(this);
}
}
创建
UtilsURL类
public class UtilsURL {
public static final String HOST_URL="https://www.zhaoapi.cn/";
public static final String TAGS_URL="product/getCatagory";
}
创建
Finish
接口
public interface Finish {
void onfinish(Bean bean);
}
创建
LeftFinish
接口
public interface LeftFinish {
public void finish2(LeftBean bean);
}
创建
ServiceAPI
接口
public interface ServiceAPI {
@GET(UtilsURL.TAGS_URL)
Flowable<Bean> bean();
@GET("product/getProductCatagory")
Flowable<LeftBean> leftbean(@Query("cid") String cid);
}
创建v包
创建
Bean类
import java.util.List;
/**
* Created by lenovo on 2017/12/8.
*/
public class Bean {
/**
* 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;
}
}
}
创建
LeftBean
类
import java.util.List;
/**
* Created by lenovo on 2017/12/8.
*/
public class LeftBean {
/**
* 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;
}
}
}
}
MainActivity主类
public class MainActivity extends AppCompatActivity implements getView {
@BindView(R.id.recycler)
RecyclerView recycler;
@BindView(R.id.recycler2)
RecyclerView recycler2;
private getpersenter p;
private getpersenter2 p2;
private getpersenter2 p21;
private String cid;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
p=new getpersenterImpl(this);
p.guanlian();
p21 = new getpersenterImpl2(this);
recycler.setLayoutManager(new LinearLayoutManager(this));
recycler2.setLayoutManager(new LinearLayoutManager(this));
}
@Override
public void ShowData(final Bean bean) {
MyAdapter adapter=new MyAdapter(MainActivity.this,bean);
recycler.setAdapter(adapter);
adapter.notifyDataSetChanged();
adapter.setOnItemClickLinster(new MyAdapter.OnItemClickLinster() {
@Override
public void OnItemClickLinser(View v, int pos) {
cid = bean.getData().get(pos).getCid()+"";
p21.guanlian2(cid);
}
@Override
public void OnItemLongClickLinser(View v, int pos) {
}
});
}
@Override
public void ShowData2(LeftBean leftBean) {
LeftAdpter adpter=new LeftAdpter(MainActivity.this,leftBean);
recycler2.setAdapter(adpter);
}
@Override
public String cid() {
return cid;
}
}
在配置文件中添加
android:name=".utils.App"