京东商城的分类
来源:互联网 发布:软装搭配软件 编辑:程序博客网 时间: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>
阅读全文
0 0
- 京东商城的分类
- 京东商城的商品分类代码
- 京东商城分类实现
- 类似于京东商城等的商品分类搜索筛选功能实现
- 类似于京东商城等的商品分类搜索筛选功能实现
- asp.net mvc 抓取京东商城分类
- 商城分类效果--以京东为例
- 无耻的京东商城
- 仿京东商城分类功能的实现
- 如何采集京东商城的商品 多图 自动分类 自动去水印 多属性自动入库
- 京东商城的“地下世界”
- 竖式菜单---纯CSS京东商城分类导航菜单代码
- 商城分类导航效果
- 商城之商品分类
- 图书商城:分类模块
- 京东商城黑幕
- 垃圾京东商城
- 京东商城售后
- c#多线程_1
- 用树莓派搭建svn服务器
- 基于单片机的LED流水灯(着力解决加速减速bug问题)
- 添加表单姓名邮箱
- [INS-06006] Passwordless SSH connectivity not set up between the following node(s):
- 京东商城的分类
- 快速排序 C语言描述
- angular4系列之国际化
- 登陆注册
- go-代码收集-net/http客户端长连接
- NEFU 1267 挑战字符串 (AC自动机+贪心)好题
- 从零开始实现遗传算法(用遗传算法破解密码)
- Apache Beam WordCount编程实战及源码解读
- windows安装scrapy时出现的问题