京东商城的分类

来源:互联网 发布:软装搭配软件 编辑:程序博客网 时间:2024/04/29 07:55

用到的依赖

  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>

原创粉丝点击