加依赖
compile 'io.reactivex:rxandroid:1.1.0'
compile 'com.squareup.retrofit2:retrofit:2.0.1'
compile 'com.squareup.retrofit2:converter-gson:2.0.1'
compile 'com.squareup.retrofit2:adapter-rxjava:2.0.1'
compile 'com.google.code.gson:gson:2.8.1'
compile 'com.android.support:recyclerview-v7:26.+'
compile 'com.squareup.okhttp3:okhttp:3.9.0'
compile 'com.squareup.okio:okio:1.13.0'
compile 'com.squareup.okhttp3:logging-interceptor:3.4.1'
compile 'com.facebook.fresco:fresco:0.12.0'
compile 'com.jakewharton:butterknife:7.0.1'
compile 'org.greenrobot:eventbus:3.0.0'
testCompile 'junit:junit:4.12'
千万记得把bean类里的price改成double类型
public class Api {
// 分类
// http://120.27.23.105/product/getCatagory
public static final String HOST = "http://120.27.23.105/";
}
public interface ApiService {
@GET("product/getCatagory")
Observable<FenleiLeftBean> getdatas();
//http://120.27.23.105/product/getProductCatagory
@GET("product/getProductCatagory")
Observable<FenleiRightBean> getRightData(@Query("cid") int cid);
@POST
Observable<FenleiLiebiaoBean> getliebiaoData(@Url String url, @QueryMap Map<String,Integer> map);
}
public class App extends Application {
@Override
public void onCreate() {
super.onCreate();
Fresco.initialize(this);
}
}
public interface FenleiLeftIView {
void showList(List<FenleiLeftBean.DataBean> list);
void showError(String e);
}
public interface FenleiLeftIModel {
void RequestData(String url,OnRequestListener onRequestListener);
}
public class FenleiLeftModel implements FenleiLeftIModel {
@Override
public void RequestData(String url, final OnRequestListener onRequestListener) {
//retrofit网络请求
Retrofit retrofit = new Retrofit
.Builder()
.baseUrl(url)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.build();
ApiService apiService = retrofit.create(ApiService.class);
Observable<FenleiLeftBean> getdatas = apiService.getdatas();
getdatas.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<FenleiLeftBean>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
onRequestListener.OnError(e.getMessage().toString());
}
@Override
public void onNext(FenleiLeftBean fenleiLeftBean) {
List<FenleiLeftBean.DataBean> data = fenleiLeftBean.data;
onRequestListener.OnSuccess(data);
}
});
}
}
public interface OnRequestListener {
void OnSuccess(List<FenleiLeftBean.DataBean> list);
void OnRightSuccess(List<FenleiRightBean.DataBean> list);
void OnError(String e);
}
public interface FenleileftIPresenter {
void loadList(String url);
}
public class FenleiLeftPresenter implements FenleileftIPresenter{
private FenleiLeftIView fenleiLeftIView;
private FenleiLeftIModel fenleiLeftIModel;
public FenleiLeftPresenter(FenleiLeftIView fenleiLeftIView) {
this.fenleiLeftIView = fenleiLeftIView;
fenleiLeftIModel = new FenleiLeftModel();
}
@Override
public void loadList(String url) {
fenleiLeftIModel.RequestData(url, new OnRequestListener() {
@Override
public void OnSuccess(List<FenleiLeftBean.DataBean> list) {
fenleiLeftIView.showList(list);
}
@Override
public void OnRightSuccess(List<FenleiRightBean.DataBean> list) {
}
@Override
public void OnError(String e) {
fenleiLeftIView.showError(e);
}
});
}
}
public class FenleiFragment extends Fragment implements FenleiLeftIView,FenleiRightIView{
@Bind(R.id.fenleileftrecler)
RecyclerView fenleileftrecler;
@Bind(R.id.fenleirightrecler)
RecyclerView fenleirightrecler;
private int id;
private FenleileftAdapter fenleileftAdapter;
private FenleiRightPresenter fenleiRightPresenter;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_fenlei, null);
ButterKnife.bind(this, view);
LinearLayoutManager linearLayoutManager=new LinearLayoutManager(getContext());
fenleileftrecler.setLayoutManager(linearLayoutManager);
LinearLayoutManager linearLayoutManagerright=new LinearLayoutManager(getContext());
fenleirightrecler.setLayoutManager(linearLayoutManagerright);
FenleiLeftPresenter fenleiLeftPresenter = new FenleiLeftPresenter(this);
fenleiLeftPresenter.loadList(Api.HOST);
fenleiRightPresenter = new FenleiRightPresenter(this);
fenleiRightPresenter.loadRightList(Api.HOST,1);
return view;
}
@Override
public void onDestroyView() {
super.onDestroyView();
ButterKnife.unbind(this);
}
@Override
public void showList(final List<FenleiLeftBean.DataBean> list) {
fenleileftAdapter = new FenleileftAdapter(getContext(), list);
fenleileftrecler.setAdapter(fenleileftAdapter);
fenleileftAdapter.setOnClickListener(new FenleileftAdapter.OnClickListener() {
@Override
public void OnDianji(View v, int position) {
int cid = list.get(position).cid;
fenleiRightPresenter.loadRightList(Api.HOST,cid);
}
});
}
@Override
public void showRight(List<FenleiRightBean.DataBean> list) {
FenleiRightAdapter fenleiRightAdapter = new FenleiRightAdapter(getContext(), list);
fenleirightrecler.setAdapter(fenleiRightAdapter);
}
@Override
public void showError(String e) {
}
}
public class FenleileftAdapter extends RecyclerView.Adapter<FenleileftAdapter.ViewHolder> {
private Context context;
private List<FenleiLeftBean.DataBean> list;
private OnClickListener onClickListener;
public FenleileftAdapter(Context context, List<FenleiLeftBean.DataBean> list) {
this.context = context;
this.list = list;
}
public OnClickListener getOnClickListener(){
return onClickListener;
}
public void setOnClickListener(OnClickListener onClickListener){
this.onClickListener=onClickListener;
}
public interface OnClickListener{
void OnDianji(View v,int position);
}
@Override
public FenleileftAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(context).inflate(R.layout.fenlei_left_item, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(FenleileftAdapter.ViewHolder holder, final int position) {
holder.left_name.setText(list.get(position).name);
holder.left_img.setImageURI(list.get(position).icon);
// EventBus.getDefault().postSticky(new FenleiEvent(list.get(position).cid));
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// EventBus.getDefault().postSticky(new FenleiEvent(list.get(position).cid));
onClickListener.OnDianji(view, position);
}
});
}
@Override
public int getItemCount() {
return list.size();
}
public class ViewHolder extends RecyclerView.ViewHolder{
public TextView left_name;
public SimpleDraweeView left_img;
public ViewHolder(View itemView) {
super(itemView);
left_name=itemView.findViewById(R.id.left_name);
left_img=itemView.findViewById(R.id.left_img);
}
}
}
public interface FenleiRightIView {
void showRight(List<FenleiRightBean.DataBean> list);
// void showError(String e);
}
public interface FenleiRightIModel {
void RequestRightData(String url,int cid,OnRequestListener onRequestListener);
}
public class FenleiRightModel implements FenleiRightIModel {
@Override
public void RequestRightData(String url, int cid, final OnRequestListener onRequestListener) {
//retrofit网络请求
Retrofit retrofit = new Retrofit
.Builder()
.baseUrl(url)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.build();
ApiService apiService = retrofit.create(ApiService.class);
Observable<FenleiRightBean> rightData = apiService.getRightData(cid);
rightData.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<FenleiRightBean>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
onRequestListener.OnError(e.getMessage().toString());
}
@Override
public void onNext(FenleiRightBean fenleiRightBean) {
List<FenleiRightBean.DataBean> data = fenleiRightBean.data;
onRequestListener.OnRightSuccess(data);
}
});
}
}
public interface FenleiRightIPresenter {
void loadRightList(String url,int cid);
}
public class FenleiRightPresenter implements FenleiRightIPresenter {
private FenleiRightIView fenleiRightIView;
private FenleiRightIModel fenleiRightIModel;
public FenleiRightPresenter(FenleiRightIView fenleiRightIView) {
this.fenleiRightIView = fenleiRightIView;
fenleiRightIModel = new FenleiRightModel();
}
@Override
public void loadRightList(String url, int cid) {
fenleiRightIModel.RequestRightData(url, cid, new OnRequestListener() {
@Override
public void OnSuccess(List<FenleiLeftBean.DataBean> list) {
}
@Override
public void OnRightSuccess(List<FenleiRightBean.DataBean> list) {
fenleiRightIView.showRight(list);
}
@Override
public void OnError(String e) {
}
});
}
}
public class FenleiRightAdapter extends RecyclerView.Adapter<FenleiRightAdapter.ViewHolder> {
private Context context;
private List<FenleiRightBean.DataBean> rightlist;
public FenleiRightAdapter(Context context, List<FenleiRightBean.DataBean> rightlist) {
this.context = context;
this.rightlist = rightlist;
}
@Override
public FenleiRightAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(context).inflate(R.layout.fenlei_right_item, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(FenleiRightAdapter.ViewHolder holder, int position) {
// holder.right_name.setText(rightlist.get(position).list.get(0).name);
holder.right_name.setText(rightlist.get(position).name);
GridLayoutManager gridLayoutManager=new GridLayoutManager(context,3);
holder.childrecycler.setLayoutManager(gridLayoutManager);
FenleiChildAdapter fenleiChildAdapter = new FenleiChildAdapter(context, rightlist.get(position).list);
holder.childrecycler.setAdapter(fenleiChildAdapter);
}
@Override
public int getItemCount() {
return rightlist.size();
}
public class ViewHolder extends RecyclerView.ViewHolder{
public TextView right_name;
public RecyclerView childrecycler;
public ViewHolder(View itemView) {
super(itemView);
right_name=itemView.findViewById(R.id.right_name);
childrecycler=itemView.findViewById(R.id.childrecycler);
}
}
}
public class FenleiChildAdapter extends RecyclerView.Adapter<FenleiChildAdapter.ViewHolder> {
private Context context;
private List<FenleiRightBean.DataBean.ListBean> listBean;
public FenleiChildAdapter(Context context, List<FenleiRightBean.DataBean.ListBean> listBean) {
this.context = context;
this.listBean = listBean;
}
@Override
public FenleiChildAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(context).inflate(R.layout.fenlei_right_child, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(FenleiChildAdapter.ViewHolder holder, final int position) {
holder.childimg.setImageURI(listBean.get(position).icon);
holder.childname.setText(listBean.get(position).name);
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
EventBus.getDefault().postSticky(new FenleiEvent(listBean.get(position).pscid));
Intent intent = new Intent(context, ProductActivity.class);
context.startActivity(intent);
}
});
}
@Override
public int getItemCount() {
return listBean.size();
}
public class ViewHolder extends RecyclerView.ViewHolder{
public SimpleDraweeView childimg;
public TextView childname;
public ViewHolder(View itemView) {
super(itemView);
childimg=itemView.findViewById(R.id.right_child_img);
childname=itemView.findViewById(R.id.right_child_name);
}
}
}
public class FenleiEvent {
int id;
public FenleiEvent(int id) {
this.id = id;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
public interface LieBiaoIView {
void showList(List<FenleiLiebiaoBean.DataBean> list);
void showError(String e);
}
public interface OnLieBiaoListener {
void OnRightSuccess(List<FenleiLiebiaoBean.DataBean> list);
void OnError(String e);
}
public interface LieBiaoIModel {
void RequestRightData(String url,int pscid,int page,int sort,OnLieBiaoListener onLieBiaoListener);
}
public class LieBiaoModel implements LieBiaoIModel {
@Override
public void RequestRightData(String url, int pscid ,int page,int sort,final OnLieBiaoListener onLieBiaoListener) {
Map<String,Integer> map=new HashMap<>();
map.put("pscid",pscid);
map.put("page",page);
map.put("sort",sort);
//retrofit网络请求
Retrofit retrofit = new Retrofit
.Builder()
.baseUrl(url)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.build();
ApiService apiService = retrofit.create(ApiService.class);
Observable<FenleiLiebiaoBean> fenleiLiebiaoBeanObservable = apiService.getliebiaoData("product/getProducts",map);
fenleiLiebiaoBeanObservable.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<FenleiLiebiaoBean>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
onLieBiaoListener.OnError(e.getMessage().toString());
}
@Override
public void onNext(FenleiLiebiaoBean fenleiLiebiaoBean) {
List<FenleiLiebiaoBean.DataBean> data = fenleiLiebiaoBean.data;
onLieBiaoListener.OnRightSuccess(data);
}
});
}
}
public interface LieBiaoIPresenter {
void loadRightList(String url,int pscid,int page,int sort);
}
public class LieBiaoPresenter implements LieBiaoIPresenter {
private LieBiaoIView lieBiaoIView;
private LieBiaoIModel lieBiaoIModel;
public LieBiaoPresenter(LieBiaoIView lieBiaoIView) {
this.lieBiaoIView = lieBiaoIView;
lieBiaoIModel = new LieBiaoModel();
}
@Override
public void loadRightList(String url, int pscid,int page,int sort) {
lieBiaoIModel.RequestRightData(url, pscid,page,sort, new OnLieBiaoListener() {
@Override
public void OnRightSuccess(List<FenleiLiebiaoBean.DataBean> list) {
lieBiaoIView.showList(list);
}
@Override
public void OnError(String e) {
lieBiaoIView.showError(e);
}
});
}
}
public class ProductActivity extends AppCompatActivity implements LieBiaoIView {
// @Bind(R.id.liebiaorecycler)
RecyclerView liebiaorecycler;
private int id;
private LieBiaoPresenter lieBiaoPresenter;
// @Bind(R.id.pro_id)
// TextView proId;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_product);
// ButterKnife.bind(this);
liebiaorecycler = (RecyclerView) findViewById(R.id.liebiaorecycler);
EventBus.getDefault().register(this);
lieBiaoPresenter = new LieBiaoPresenter(this);
lieBiaoPresenter.loadRightList(Api.HOST,id,1,0);
}
//在onStart调用register后,执行消息
@Subscribe(sticky = true, threadMode = ThreadMode.MAIN)
public void onEvent(FenleiEvent event) {
id = event.getId();
// lieBiaoPresenter.loadRightList(Api.HOST,id,1,0);
// proId.setText(id+"");
// Toast.makeText(getContext(),"id"+ android.R.attr.id,Toast.LENGTH_SHORT).show();
}
@Override
protected void onDestroy() {
super.onDestroy();
EventBus.getDefault().unregister(this);
}
@Override
public void showList(List<FenleiLiebiaoBean.DataBean> list) {
LinearLayoutManager linearLayoutManager=new LinearLayoutManager(this);
liebiaorecycler.setLayoutManager(linearLayoutManager);
LieBiaoAdapter lieBiaoAdapter = new LieBiaoAdapter(ProductActivity.this, list);
liebiaorecycler.setAdapter(lieBiaoAdapter);
}
@Override
public void showError(String e) {
}
}
public class LieBiaoAdapter extends RecyclerView.Adapter<LieBiaoAdapter.ViewHolder> {
private Context context;
private List<FenleiLiebiaoBean.DataBean> liebiaolist=new ArrayList<>();
public LieBiaoAdapter(Context context, List<FenleiLiebiaoBean.DataBean> liebiaolist) {
this.context = context;
this.liebiaolist = liebiaolist;
}
@Override
public LieBiaoAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(context).inflate(R.layout.liebiao_item, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(LieBiaoAdapter.ViewHolder holder, int position) {
String images = liebiaolist.get(position).images;
if (images!=null){
String[] split = images.split("\\|");
Uri uri = Uri.parse(split[0]);
holder.liebiapimg.setImageURI(uri);
holder.liebiao_title.setText(liebiaolist.get(position).title);
holder.liebiao_price.setText("价格:"+liebiaolist.get(position).price);
holder.liebiao_num.setText("销量:"+liebiaolist.get(position).salenum);
}
}
@Override
public int getItemCount() {
return liebiaolist.size();
}
public class ViewHolder extends RecyclerView.ViewHolder{
public SimpleDraweeView liebiapimg;
public TextView liebiao_title,liebiao_price,liebiao_num;
public ViewHolder(View itemView) {
super(itemView);
liebiapimg=itemView.findViewById(R.id.liebiao_img);
liebiao_title=itemView.findViewById(R.id.liebiao_name);
liebiao_price=itemView.findViewById(R.id.liebiao_price);
liebiao_num=itemView.findViewById(R.id.liebiao_num);
}
}
}
activity_product
<android.support.v7.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/liebiaorecycler"></android.support.v7.widget.RecyclerView>
liebiao_item
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:fresco="http://schemas.android.com/apk/res-auto"
android:orientation="horizontal" android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/liebiao_img"
android:layout_width="150dp"
android:layout_height="150dp"
android:layout_margin="8dp"
fresco:failureImage="@mipmap/ic_launcher" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="150dp"
android:layout_margin="8dp"
android:gravity="center"
android:orientation="vertical">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/liebiao_name"
android:maxLines="2"
android:text="cdfd"
/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/liebiao_price"
android:layout_marginTop="5dp"
android:maxLines="2"
android:text="cdfd"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/liebiao_num"
android:maxLines="2"
android:layout_marginTop="5dp"
android:text="cdfd"/>
</LinearLayout>
</LinearLayout>
fragment_fenlei
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal" android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.RecyclerView
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:id="@+id/fenleileftrecler"></android.support.v7.widget.RecyclerView>
<android.support.v7.widget.RecyclerView
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="4"
android:id="@+id/fenleirightrecler"></android.support.v7.widget.RecyclerView>
</LinearLayout>
fenlei_left_item
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="10dp"
android:id="@+id/left_name"/>
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/left_img"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_margin="8dp"
fresco:failureImage="@mipmap/ic_launcher" />
fenlei_right_item
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/right_name"
android:text="dfd"
android:padding="10dp"/>
<android.support.v7.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/childrecycler"></android.support.v7.widget.RecyclerView>
fenlei_right_child
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:fresco="http://schemas.android.com/apk/res-auto"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/right_child_name"
android:layout_margin="8dp"
android:text="dcdc"/>
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/right_child_img"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_margin="8dp"
fresco:failureImage="@mipmap/ic_launcher" />
</LinearLayout>

