京东商城的分类

用到的依赖

  compile 'com.android.support:recyclerview-v7:26.1.0'
    compile 'com.jakewharton:butterknife:8.8.1'
    annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
    compile 'com.squareup.retrofit2:retrofit:2.3.0'
    compile 'com.squareup.retrofit2:converter-gson:2.3.0'
    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.facebook.fresco:fresco:1.5.0'
}
请求方式

public interface IGetDataBase {

    //https://www.zhaoapi.cn/product/getCatagory
    //https://www.zhaoapi.cn/product/getProductCatagory?cid=1
    @GET("/product/getCatagory") //{user}
   Observable<SvBean> getSv();    //@Path("user") String user
    @GET("product/getProductCatagory")
   Observable<ElvBean> getElv(@Query("cid") int cid);
}
View层

public interface SuccessIf {
     void  SuccessSv(SvBean svBean);
     void FailureSv(SvBean e);
     void SuccessElv(ElvBean elvBean);
     void  FailureElv(Exception e);
     int getCid();
}
Modle层的左侧接口

public interface SuccessModle {
    void  SuccessSv(SvBean svBean);
    void FailureSv(SvBean e);
}
Modle层右侧的接口

public interface SuccessModleElv {
    void SuccessElv(int cid,ElvBean elvBean);
    void  FailureElv(Exception e);

}
Modle层的实体类

public class SuccessModles {

    //左侧请求
    public  void getSv(final SuccessModle successModle){
        Observable<SvBean>call = App.iGetDataBase.getSv();
        call.subscribeOn(Schedulers.io())//子线程
                .observeOn(AndroidSchedulers.mainThread())//主线程
                .subscribe(new Consumer<SvBean>() {
                    @Override  //请求bean包
                    public void accept(SvBean svBean) throws Exception {
                        successModle.SuccessSv( svBean);
                    }
                });

    }
   //右侧请求
    public  void getElv(final int cid,final SuccessModleElv successModleElv){
//         Map<String, String> map = new HashMap<>();
//        map.put("cid","1");
        Observable<ElvBean> call = App.iGetDataBase.getElv(cid);
        call.subscribeOn(Schedulers.io())//子线程
              .observeOn(AndroidSchedulers.mainThread())//主线程
              .subscribe(new Consumer<ElvBean>() {
                  @Override  //请求bean包
                  public void accept(ElvBean bean) throws Exception {
                      successModleElv.SuccessElv(cid,bean);
                  }
              });
    }

}
Presneter层

public class SuccessPrenter {
    SuccessModles successModles;//Modle层的实体类
    WeakReference<SuccessIf> successIf;  //view层

    public SuccessPrenter(SuccessIf successIf) {
        this.successModles = new SuccessModles();
        datach(successIf);
    }

    //左侧请求
    public void getSv() {
        successModles.getSv(new SuccessModle() {
            @Override
            public void SuccessSv(SvBean svBean) {
                if (successIf != null) {
                    successIf.get().SuccessSv(svBean);

                }

            }
            @Override
            public void FailureSv(SvBean e) {
            }
        });
    }

    //右侧
    public void getElv() {
        int cid = successIf.get().getCid();
        successModles.getElv(cid,new SuccessModleElv() {
            @Override
            public void SuccessElv(int cid,ElvBean elvBean) {
                if (successIf != null) {
                    successIf.get().SuccessElv(elvBean);
                }
            }
            @Override
            public void FailureElv(Exception e) {

            }
        });

    }

    // 绑定 内存泄漏
    public void datach(SuccessIf view) {
        successIf = new WeakReference(view);
    }

    //解绑
    public void data() {
        successIf.clear();
    }
}
请求的初始化和图片框架的初始化

public class App extends Application {
    public  static IGetDataBase iGetDataBase;  //这是定义的网络请求接口

    @Override
    public void onCreate() {
        super.onCreate();
        //Fresco图片加载的框架 初始化
        Fresco.initialize(this);
        //Retrofit网络请求 这里放的是请求头  因为这里是初始化 数据先走这里 http://v.juhe.cn请求头
        Retrofit retrofit = new Retrofit.Builder().baseUrl("https://www.zhaoapi.cn")
                .addConverterFactory(GsonConverterFactory.create())
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .build();
        iGetDataBase=  retrofit.create(IGetDataBase.class);



    }
}
左侧请求的适配器

public class SvApdata extends RecyclerView.Adapter<SvApdata.ViewHolder> implements View.OnClickListener{
    Context context;
    SvBean svBean;
    private OnItemClickListener mOnItemClickListener = null;
    public void setOnItemClickListener(OnItemClickListener listener) {
        this.mOnItemClickListener = listener;
    }
    public SvApdata(Context context, SvBean svBean) {
        this.context = context;
        this.svBean = svBean;
    }

    @Override
    public SvApdata.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = View.inflate(context, R.layout.sv_buju,null);
        view.setOnClickListener(this);
        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(SvApdata.ViewHolder holder, final int position) {
        holder.tvS.setText(svBean.getData().get(position).getName());
        holder.itemView.setTag(position);
    }

    @Override
    public int getItemCount() {
        return svBean.getData().size();
    }

    @Override
    public void onClick(View view) {
        if (mOnItemClickListener != null) {
            //注意这里使用getTag方法获取position
            mOnItemClickListener.onItemClick(view,(int)view.getTag());
        }
    }

    public class ViewHolder extends RecyclerView.ViewHolder {
        TextView tvS;
        public ViewHolder(View itemView) {
            super(itemView);
            tvS = itemView.findViewById(R.id.tvS);
        }
    }
    public static interface OnItemClickListener {
        void onItemClick(View view , int position);
    }
}

布局文件

<?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">
  <TextView
      android:id="@+id/tvS"
      android:textSize="20dp"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content" />
</LinearLayout>

右侧的适配器

public class ElvApdata extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
    Context context;
    ElvBean elvBeans;
    private OnItemClickListener onItemClickListener;
    public ElvApdata(Context context, ElvBean elvBeans) {
        this.context = context;
        this.elvBeans = elvBeans;
    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = View.inflate(context, R.layout.right_item, null);
        MyViewHolder holder = new MyViewHolder(view);
        return holder;
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
        ((MyViewHolder)holder).tv.setText(elvBeans.getData().get(position).getName());
         MyGridViewAdapter adapter = new MyGridViewAdapter(context,elvBeans);
        ((MyViewHolder)holder).gv.setAdapter(adapter);

   }

    @Override
    public int getItemCount() {
        if (elvBeans != null){
            return elvBeans.getData().size();
        }
        return 0;
    }

    static class MyViewHolder extends RecyclerView.ViewHolder{
        @BindView(R.id.tv)
        TextView tv;
        @BindView(R.id.gv)
        GridView gv;
        MyViewHolder(View view) {
            super(view);
            ButterKnife.bind(this, view);
        }
    }
    public  interface  OnItemClickListener{
        void onItemock(View view, int position);
    }
}

布局文件

<?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:id="@+id/tv"
        android:textSize="20dp"
        android:layout_marginTop="10dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="123"/>
    <GridView
        android:id="@+id/gv"
        android:layout_marginTop="20dp"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:numColumns="3">
    </GridView>
</LinearLayout>

下面是右面适配器里面包裹的适配器

public class MyGridViewAdapter extends BaseAdapter {
    Context context;
    ElvBean elvBeans;
    private OnItemClickListener onItemClickListener;
    public MyGridViewAdapter(Context context, ElvBean elvBeans) {
        this.context = context;
        this.elvBeans = elvBeans;
    }

    @Override
    public int getCount() {
        return elvBeans==null ?0:elvBeans.getData().size();
    }

    @Override
    public Object getItem(int i) {
        return 0;
    }

    @Override
    public long getItemId(int i) {
        return 0;
    }

    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {
        ViewHolder holder = null;
        if (view == null){
            holder = new ViewHolder();
            view = View.inflate(context, R.layout.gridview_item,null);

            holder.tv = view.findViewById(R.id.tv);
            holder.sim = view.findViewById(R.id.sim);
            view.setTag(holder);
        }else {
            holder = (ViewHolder) view.getTag();
        }

        holder.tv.setText(elvBeans.getData().get(i).getList().get(i).getName());
        DraweeController controller = Fresco.newDraweeControllerBuilder()
                .setUri(Uri.parse(elvBeans.getData().get(i).getList().get(i).getIcon()))
                .build();
        holder.sim.setController(controller);
      

        return view;
    }
    class ViewHolder{
        SimpleDraweeView sim;
        TextView tv;
    }

    public  interface  OnItemClickListener{
        void onItemock(View view, int position);
    }
}
布局文件

<?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">
    <com.facebook.drawee.view.SimpleDraweeView
        android:id="@+id/sim"
        android:layout_width="70dp"
        android:layout_height="70dp"
        android:layout_gravity="center"/>
    <TextView
        android:id="@+id/tv"
        android:textSize="20dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"/>
</LinearLayout>
主方法

public class MainActivity extends AppCompatActivity implements SuccessIf{
    @BindView(R.id.rv)
    RecyclerView rv;
    @BindView(R.id.rv2)
    RecyclerView rv2;
    SuccessPrenter successPrenter;
    int cid;
    //https://www.zhaoapi.cn/product/getCatagory
    //https://www.zhaoapi.cn/product/getProductCatagory?cid=1
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);
        successPrenter = new SuccessPrenter(this);
        successPrenter.getSv();
        successPrenter.getElv();
    }
    @Override
    public void SuccessSv(final SvBean svBean) {
        //线性布局
        rv.setLayoutManager(new LinearLayoutManager(this));
        //拿到适配器
        SvApdata adapter= new SvApdata(this,svBean);
        rv.setAdapter(adapter);
        adapter.setOnItemClickListener(new SvApdata.OnItemClickListener(){
            @Override
            public void onItemClick(View view , int position){
                cid = svBean.getData().get(position).getCid();
                successPrenter.getElv();
            }
        });

    }

    @Override
    public void FailureSv(SvBean e) {

    }

    @Override
    public void SuccessElv(ElvBean elvBeans) {
        LinearLayoutManager mgs = new LinearLayoutManager(this);
        rv2.setLayoutManager(mgs);
        //拿到适配器
        ElvApdata adapter = new ElvApdata(this,elvBeans);
        rv2.setAdapter(adapter);
    }



    @Override
    public void FailureElv(Exception e) {

    }

    @Override
    public int getCid() {
        return cid;
    }
}
主布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.fenglei.MainActivity">

    <android.support.v7.widget.RecyclerView
        android:id="@+id/rv"
        android:layout_width="80dp"
        android:layout_height="match_parent">

    </android.support.v7.widget.RecyclerView>
   <android.support.v7.widget.RecyclerView
       android:id="@+id/rv2"
       android:layout_marginLeft="30dp"
       android:layout_width="match_parent"
       android:layout_height="match_parent">
   </android.support.v7.widget.RecyclerView>
</LinearLayout>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值