使用MVP+Retrofit+RXJava实现仿京东分类

加依赖
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>



评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值