1.清单文件配置请求网络权限:
<!--网络请求的权限--> <uses-permission android:name="android.permission.INTERNET"/>
2.设置依赖:1.Okhttp(网络请求); 2.RecyclerView(条目展示); 3.Glide(请求图片); 4.Gson(解析)
compile 'com.squareup.okhttp3:okhttp:3.10.0' compile 'com.android.support:recyclerview-v7:26.1.0' compile 'com.github.bumptech.glide:glide:3.7.0' compile 'com.google.code.gson:gson:2.2.4'3. Model 层:1.接口;2.实现类
package com.example.myshopping.model; import com.example.myshopping.presenter.DataPresenter; //创建接口 public interface DataModel { //定义请求数据的方法 //参数:1.请求数据接口的url 2.P层的接口(用于将获取的数据集合传回P层) void getData(String url, DataPresenter presenter); }
package com.example.myshopping.model; import com.example.myshopping.presenter.DataPresenter; import com.example.myshopping.urils.OkhtttpUtils; import com.google.gson.Gson; import java.io.IOException; import java.util.List; import okhttp3.Call; import okhttp3.Callback; import okhttp3.Response; //创建接口实现类 实现接口 重写接口中定义的方法 public class MyDataModel implements DataModel{ //重写请求数据的方法 @Override public void getData(String url, final DataPresenter presenter) { //使用OkHttp进行请求 重写失败与成功的方法 OkhtttpUtils.doGet(url, new Callback() { //失败 @Override public void onFailure(Call call, IOException e) {} //成功 @Override public void onResponse(Call call, Response response) throws IOException { //获取服务器返回的数据 String json = response.body().string(); //使用Gson解析进行解析 Gson gson = new Gson(); //得到解析后的数据 MyData myData = gson.fromJson(json, MyData.class); //得到解析后的list集合 List<MyData.DataBean> list = myData.getData(); //调用P层的方法,将获取的数据集合传回P层 presenter.Success(list); } }); } }4. Presenter层:1.接口; 2.实现类
package com.example.myshopping.presenter; import com.example.myshopping.model.MyData; import java.util.List; //创建接口 public interface DataPresenter { //定义成功与失败的方法 //参数:1.接收返回的数据集合 void Success(List<MyData.DataBean> list); void Error(); }
package com.example.myshopping.presenter; import com.example.myshopping.model.MyData; import com.example.myshopping.model.MyDataModel; import com.example.myshopping.view.DataView; import java.util.List; //创建接口实现类 实现接口 重写接口中定义的方法 public class MyDataPresenter implements DataPresenter{ //3.创建构建器 把V层传入到P层 DataView dataView; private final MyDataModel model; public MyDataPresenter(DataView dataView) { this.dataView=dataView; //4.实例化M层 model = new MyDataModel(); } //成功 接收从M层传来的集合数据 @Override public void Success(List<MyData.DataBean> list) { //5.调用V层接收数据的方法 把list集合传回m层 dataView.toBackHome(list); } //失败 @Override public void Error() {} //1.定义接收数据接口url的方法 public void netWrok(String url){ //6.调用m层请求数据的方法,将接口url和p层传到M层 model.getData(url,this); } }5. View层:1.接口; 2.实现类
package com.example.myshopping.view; import com.example.myshopping.model.MyData; import java.util.List; //创建接口 public interface DataView { //定义接收数据的方法 void toBackHome(List<MyData.DataBean> list); }
package com.example.myshopping.view; import android.os.Handler; import android.os.Message; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.support.v7.widget.GridLayoutManager; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.View; import android.widget.CheckBox; import android.widget.ImageView; import android.widget.TextView; import com.example.myshopping.R; import com.example.myshopping.adapter.MyAdapter; import com.example.myshopping.model.MyData; import com.example.myshopping.presenter.MyDataPresenter; import java.math.BigDecimal; import java.util.List; //实现接口 DataView 和 适配器中MyAdapter.UpdataNum的方法 public class MainActivity extends AppCompatActivity implements DataView,MyAdapter.UpdataNum{ private ImageView my_icon; private RecyclerView my_rcy; private CheckBox my_cb; private TextView my_zj; private TextView my_js; int i=0;//用于判断图片的切换 double prices=0.0;//总价 int nums=0;//件数 //请求数据的接口 String url = "https://www.zhaoapi.cn/product/getProducts?pscid=1"; private MyAdapter myAdapter; private List<MyData.DataBean> list; //创建Handler Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); //获取msg传来的数据 需强转 list = (List<MyData.DataBean>) msg.obj; //设置适配器 将MainActivity和集合传给适配器 myAdapter = new MyAdapter(MainActivity.this, list); //将适配器设置到my_rcy上 my_rcy.setAdapter(myAdapter); //调用适配器中实现接口的方法 myAdapter.Setshopping(MainActivity.this); } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //找到资源控件的ID my_icon = findViewById(R.id.my_icon);//图片 my_rcy = findViewById(R.id.my_rcy);//布局 my_cb = findViewById(R.id.my_cb);//全选 my_zj = findViewById(R.id.my_zj);//总价 my_js = findViewById(R.id.my_js);//件数 //设置线性布局管理器 (工程一加载时,默认显示线性布局) my_rcy.setLayoutManager(new LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false)); //给图片设置点击事件 实现点击图片时切换线性与表格布局 my_icon.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { i++; //进行判断 当i%2==0时则显示线性布局,否则显示表格布局 if(i%2==0){ //设置线性布局管理器 my_rcy.setLayoutManager(new LinearLayoutManager(MainActivity.this,LinearLayoutManager.VERTICAL,false)); }else{ //设置表格布局管理器 my_rcy.setLayoutManager(new GridLayoutManager(MainActivity.this,2)); } } }); //2.1实例化p层 将MainActivity(DataView)传给P层 final MyDataPresenter presenter = new MyDataPresenter(this); //2.2调用传送url的方法 presenter.netWrok(url); //设置全选的点击事件 my_cb.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if(my_cb.isChecked()){ //若选中则为true for(int i=0;i<list.size();i++){ list.get(i).setCheck(true); } //刷新适配器 myAdapter.notifyDataSetChanged(); }else{ //若未选中则为false for(int i=0;i<list.size();i++){ list.get(i).setCheck(false); } //刷新适配器 myAdapter.notifyDataSetChanged(); } //调用改变总价的方法 CheckPrices(); //调用改变件数的方法 CheckNums(); } }); } //7.接收P层传来的数据 因其在子线程中,所有需使用Handler更新ui @Override public void toBackHome(List<MyData.DataBean> list) { //创建Message对象 Message msg = new Message(); //将list集合传入msg msg.obj=list; //将msg传给handler handler.sendMessage(msg); } //实现加数量的方法 @Override public void addNum(int position) { //得到当前数量 int num = list.get(position).getSellerid(); //点击时加1 num++; //将加后的数量设置进Bean中 list.get(position).setSellerid(num); //刷新适配器 myAdapter.notifyDataSetChanged(); //调用改变总价的方法 CheckPrices(); //调用改变件数的方法 CheckNums(); } //实现减数量的方法 @Override public void jianNum(int position) { //得到当前数量 int num = list.get(position).getSellerid(); //点击时减1 num--; //将加后的数量设置进Bean中 list.get(position).setSellerid(num); //刷新适配器 myAdapter.notifyDataSetChanged(); //调用改变总价的方法 CheckPrices(); //调用改变件数的方法 CheckNums(); } //实现若选中复选框,则修改总价和件数的功能 @Override public void selectCheck(int position,boolean isCheck) { //得到bean MyData.DataBean bean = list.get(position); //未复选框设置状态 bean.setCheck(isCheck); //调用改变总价的方法 CheckPrices(); //调用改变件数的方法 CheckNums(); } //实现删除条目的方法 @Override public void itemDelete(int position) { list.remove(position); } //定义改变总价的方法 public void CheckPrices(){ //初始化总价为0 prices=0; for (int a=0;a<list.size();a++){ //得到bean MyData.DataBean bean = list.get(a); //判断若选中 总价+=数量*单价 if(bean.getisCheck()){ prices+=list.get(a).getSellerid()*list.get(a).getPrice(); } } //将最后的总价进行四舍五入 然后保留小数后2位 BigDecimal bg = new BigDecimal(prices); double f1 = bg.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); //将总价设置给显示控件 my_zj.setText("总价:"+f1); } //定义改变件数的方法 public void CheckNums(){ //初始化数量为0 nums=0; //循环集合 for(int x = 0;x<list.size();x++){ //得到Bean MyData.DataBean bean = list.get(x); //判断复选框是否选中 if(bean.getisCheck()){ nums++; } } //将得到的件数赋值给显示控件 my_js.setText("件数:"+nums); //刷新适配器 myAdapter.notifyDataSetChanged(); } }
6.RecyclerView.Adapter适配器:
package com.example.myshopping.adapter; import android.content.Context; import android.support.v7.widget.RecyclerView; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.CheckBox; import android.widget.ImageView; import android.widget.TextView; import com.bumptech.glide.Glide; import com.example.myshopping.R; import com.example.myshopping.model.MyData; import com.example.myshopping.view.MainActivity; import java.util.List; //创建适配器 继承RecyclerView.Adapter 重写其3个方法 public class MyAdapter extends RecyclerView.Adapter{ Context context; List<MyData.DataBean> list; public MyAdapter(Context context, List<MyData.DataBean> list) { this.context=context; this.list=list; } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { //引入条目布局 View view = View.inflate(context, R.layout.rcy_item, null); //创建MyViewHolder,将view传到MyViewHolder MyViewHolder myViewHolder = new MyViewHolder(view); //将myViewHolder返回 return myViewHolder; } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) { //将系统自带的holder与自定义的MyViewHolder进行绑定 final MyViewHolder myViewHolder = (MyViewHolder) holder; //为myViewHolder中的控件进行赋值 myViewHolder.rcy_title.setText(list.get(position).getTitle());//标题 myViewHolder.rcy_price.setText(list.get(position).getPrice()+"");//价格 myViewHolder.rcy_num.setText(list.get(position).getSellerid()+"");//数量 myViewHolder.rcy_cb.setChecked(list.get(position).getisCheck());//复选框的状态 //使用Glide为图片赋值 String imgurl="http://www.ca-maimai.com/Public/kindeditor_images/image/20140828/20140828125439_54766.jpg"; Glide.with(context).load(imgurl).into(myViewHolder.rcy_img); //设置监听 实现加的功能 myViewHolder.rcy_add.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //调用接口中的加方法 updataNum.addNum(position); } }); //设置监听 实现减的功能 myViewHolder.rcy_jian.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //调用接口中的减方法 updataNum.jianNum(position); } }); //设置监听 实现复选框选择功能 myViewHolder.rcy_cb.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //调用接口中的全部选中的方法 updataNum.selectCheck(position,myViewHolder.rcy_cb.isChecked()); } }); //设置监听 实现删除功能 myViewHolder.rcy_delete.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //调用接口中的加方法 updataNum.itemDelete(position); } }); } //条目的数量 @Override public int getItemCount() { return list.size(); } //创建ViewHolder 继承RecyclerView.ViewHolder class MyViewHolder extends RecyclerView.ViewHolder { private final CheckBox rcy_cb; private final ImageView rcy_img; private final TextView rcy_title; private final TextView rcy_price; private final Button rcy_jian; private final TextView rcy_num; private final Button rcy_add; private final ImageView rcy_delete; public MyViewHolder(View itemView) { super(itemView); //通过传来的View,找到条目布局中的控件 rcy_cb = itemView.findViewById(R.id.rcy_cb); rcy_img = itemView.findViewById(R.id.rcy_img); rcy_title = itemView.findViewById(R.id.rcy_title); rcy_price = itemView.findViewById(R.id.rcy_price); rcy_jian = itemView.findViewById(R.id.rcy_jian); rcy_num = itemView.findViewById(R.id.rcy_num); rcy_add = itemView.findViewById(R.id.rcy_add); rcy_delete = itemView.findViewById(R.id.rcy_delete); } } //创建方法 用于调用接口 UpdataNum updataNum; public void Setshopping(UpdataNum updataNum){ this.updataNum=updataNum; } //创建接口 public interface UpdataNum{ //定义实现减数量、加数量的方法 //参数:1.下标;2.显示数量的控件;3.设置复选框选择状态 void addNum(int position);//加 void jianNum(int position);//减 void selectCheck(int position,boolean isCheck);//若选中复选框,则实现总价和件数的功能 void itemDelete(int position); } }7. OkhtttpUtils工具类:
package com.example.myshopping.urils; import android.os.Environment; import java.io.File; import java.util.Map; import java.util.concurrent.TimeUnit; import okhttp3.Cache; import okhttp3.Callback; import okhttp3.FormBody; import okhttp3.MediaType; import okhttp3.MultipartBody; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.RequestBody;
public class OkhtttpUtils { //单例模式,把构造方法进行私有化 public OkhtttpUtils(){}; static OkHttpClient client; public static OkHttpClient getInstance(){ if (client==null) { //更加安全 synchronized (OkhtttpUtils.class) { //缓存的地方 mnt/sdcard File file = new File(Environment.getExternalStorageDirectory(), "cache11"); client = new OkHttpClient().newBuilder() .readTimeout(3000, TimeUnit.SECONDS) //设置读取超时时间 .connectTimeout(3000, TimeUnit.SECONDS) //设置连接的超时时间 .cache(new Cache(file, 10 * 1024)) .build(); } } return client; } /** * get请求 * Callback 是一个接口 */ public static void doGet(String url, Callback callback){ //1:拿到okhttpclient 对像 OkHttpClient client = getInstance(); //2:进行请求的操作 Request request = new Request.Builder() .url(url) .build(); client.newCall(request).enqueue(callback); } //post请求 /** * * @param url 请求的地址 * @param parms 请求的参数 * @param callback callback */ public static void doPost(String url, Map<String,String> parms,Callback callback){ //得到客户端的对像 OkHttpClient client = getInstance(); //不是FormBody,而是一个Builder FormBody.Builder body = new FormBody.Builder(); //key value for (String key:parms.keySet()){ //value的值 body.add(key,parms.get(key)); } Request request = new Request.Builder() .url(url) .post(body.build()) .build(); client.newCall(request).enqueue(callback); } //用来上传图片的 //url , 图片 ,参数 Callback public static void upImage(String url,File file,String filenName,Map<String,String> params,Callback callback){ OkHttpClient client = getInstance(); //requestBody的实现类 Formbody MultipartBody.Builder builder = new MultipartBody.Builder(); if (params!=null){ for (String key :params.keySet()){ builder.addFormDataPart(key,params.get(key)); } } //设置类型 builder.setType(MultipartBody.FORM); builder.addFormDataPart("file",filenName,RequestBody.create(MediaType.parse("application/octet-stream"),file)); // builder.setType(MultipartBody.FORM); // builder.addFormDataPart("file",filenName,RequestBody.create(MediaType.parse("application/octet-stream"),file)); //builder.addFormDataPart("file","aa.png",builder.build()); Request request = new Request.Builder() .url(url) .post(builder.build()) .build(); client.newCall(request).enqueue(callback); } }8. MyData数据Bean:
package com.example.myshopping.model; import java.util.List; public class MyData { /** * msg : 请求成功 * code : 0 * data : [{"bargainPrice":111.99,"createtime":"2017-10-03T23:53:28","detailUrl":"https://item.m.jd.com/product/4719303.html?utm_source=androidapp&utm_medium=appshare&utm_campaign=t_335139774&utm_term=QQfriends","images":"https://m.360buyimg.com/n0/jfs/t9004/210/1160833155/647627/ad6be059/59b4f4e1N9a2b1532.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t7504/338/63721388/491286/f5957f53/598e95f1N7f2adb87.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t7441/10/64242474/419246/adb30a7d/598e95fbNd989ba0a.jpg!q70.jpg","itemtype":0,"pid":6,"price":7.99,"pscid":1,"salenum":234,"sellerid":22,"subhead":"每个中秋都不能简单,无论身在何处,你总需要一块饼让生活更圆满,京东月饼让爱更圆满京东自营,闪电配送,更多惊喜,快用手指戳一下","title":"北京稻香村 稻香村中秋节月饼 老北京月饼礼盒655g"},{"bargainPrice":111.99,"createtime":"2017-10-14T21:48:08","detailUrl":"https://item.m.jd.com/product/4719303.html?utm_source=androidapp&utm_medium=appshare&utm_campaign=t_335139774&utm_term=QQfriends","images":"https://m.360buyimg.com/n0/jfs/t9004/210/1160833155/647627/ad6be059/59b4f4e1N9a2b1532.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t7504/338/63721388/491286/f5957f53/598e95f1N7f2adb87.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t7441/10/64242474/419246/adb30a7d/598e95fbNd989ba0a.jpg!q70.jpg","itemtype":2,"pid":9,"price":78.99,"pscid":1,"salenum":2356,"sellerid":2,"subhead":"每个中秋都不能简单,无论身在何处,你总需要一块饼让生活更圆满,京东月饼让爱更圆满京东自营,闪电配送,更多惊喜,快用手指戳一下","title":"北京稻香村 稻香村中秋节月饼 老北京月饼礼盒655g"},{"bargainPrice":111.99,"createtime":"2017-10-14T21:39:05","detailUrl":"https://item.m.jd.com/product/4719303.html?utm_source=androidapp&utm_medium=appshare&utm_campaign=t_335139774&utm_term=QQfriends","images":"https://m.360buyimg.com/n0/jfs/t9004/210/1160833155/647627/ad6be059/59b4f4e1N9a2b1532.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t7504/338/63721388/491286/f5957f53/598e95f1N7f2adb87.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t7441/10/64242474/419246/adb30a7d/598e95fbNd989ba0a.jpg!q70.jpg","itemtype":1,"pid":5,"price":88.99,"pscid":1,"salenum":678,"sellerid":21,"subhead":"每个中秋都不能简单,无论身在何处,你总需要一块饼让生活更圆满,京东月饼让爱更圆满京东自营,闪电配送,更多惊喜,快用手指戳一下","title":"北京稻香村 稻香村中秋节月饼 老北京月饼礼盒655g"},{"bargainPrice":111.99,"createtime":"2017-10-14T21:39:05","detailUrl":"https://item.m.jd.com/product/4719303.html?utm_source=androidapp&utm_medium=appshare&utm_campaign=t_335139774&utm_term=QQfriends","images":"https://m.360buyimg.com/n0/jfs/t9004/210/1160833155/647627/ad6be059/59b4f4e1N9a2b1532.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t7504/338/63721388/491286/f5957f53/598e95f1N7f2adb87.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t7441/10/64242474/419246/adb30a7d/598e95fbNd989ba0a.jpg!q70.jpg","itemtype":1,"pid":1,"price":118,"pscid":1,"salenum":0,"sellerid":17,"subhead":"每个中秋都不能简单,无论身在何处,你总需要一块饼让生活更圆满,京东月饼让爱更圆满京东自营,闪电配送,更多惊喜,快用手指戳一下","title":"北京稻香村 稻香村中秋节月饼 老北京月饼礼盒655g"},{"bargainPrice":111.99,"createtime":"2017-10-14T21:39:05","detailUrl":"https://item.m.jd.com/product/4719303.html?utm_source=androidapp&utm_medium=appshare&utm_campaign=t_335139774&utm_term=QQfriends","images":"https://m.360buyimg.com/n0/jfs/t9004/210/1160833155/647627/ad6be059/59b4f4e1N9a2b1532.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t7504/338/63721388/491286/f5957f53/598e95f1N7f2adb87.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t7441/10/64242474/419246/adb30a7d/598e95fbNd989ba0a.jpg!q70.jpg","itemtype":1,"pid":7,"price":120.01,"pscid":1,"salenum":1266,"sellerid":23,"subhead":"每个中秋都不能简单,无论身在何处,你总需要一块饼让生活更圆满,京东月饼让爱更圆满京东自营,闪电配送,更多惊喜,快用手指戳一下","title":"北京稻香村 稻香村中秋节月饼 老北京月饼礼盒655g"},{"bargainPrice":111.99,"createtime":"2017-10-14T21:38:26","detailUrl":"https://item.m.jd.com/product/4719303.html?utm_source=androidapp&utm_medium=appshare&utm_campaign=t_335139774&utm_term=QQfriends","images":"https://m.360buyimg.com/n0/jfs/t9004/210/1160833155/647627/ad6be059/59b4f4e1N9a2b1532.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t7504/338/63721388/491286/f5957f53/598e95f1N7f2adb87.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t7441/10/64242474/419246/adb30a7d/598e95fbNd989ba0a.jpg!q70.jpg","itemtype":1,"pid":23,"price":188,"pscid":1,"salenum":233,"sellerid":16,"subhead":"每个中秋都不能简单,无论身在何处,你总需要一块饼让生活更圆满,京东月饼让爱更圆满京东自营,闪电配送,更多惊喜,快用手指戳一下","title":"北京稻香村 稻香村中秋节月饼 老北京月饼礼盒655g"},{"bargainPrice":111.99,"createtime":"2017-10-03T23:53:28","detailUrl":"https://item.m.jd.com/product/4719303.html?utm_source=androidapp&utm_medium=appshare&utm_campaign=t_335139774&utm_term=QQfriends","images":"https://m.360buyimg.com/n0/jfs/t9004/210/1160833155/647627/ad6be059/59b4f4e1N9a2b1532.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t7504/338/63721388/491286/f5957f53/598e95f1N7f2adb87.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t7441/10/64242474/419246/adb30a7d/598e95fbNd989ba0a.jpg!q70.jpg","itemtype":0,"pid":3,"price":198,"pscid":1,"salenum":1234,"sellerid":19,"subhead":"每个中秋都不能简单,无论身在何处,你总需要一块饼让生活更圆满,京东月饼让爱更圆满京东自营,闪电配送,更多惊喜,快用手指戳一下","title":"北京稻香村 稻香村中秋节月饼 老北京月饼礼盒655g"},{"bargainPrice":111.99,"createtime":"2017-10-14T21:39:05","detailUrl":"https://item.m.jd.com/product/4719303.html?utm_source=androidapp&utm_medium=appshare&utm_campaign=t_335139774&utm_term=QQfriends","images":"https://m.360buyimg.com/n0/jfs/t9004/210/1160833155/647627/ad6be059/59b4f4e1N9a2b1532.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t7504/338/63721388/491286/f5957f53/598e95f1N7f2adb87.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t7441/10/64242474/419246/adb30a7d/598e95fbNd989ba0a.jpg!q70.jpg","itemtype":1,"pid":16,"price":199,"pscid":1,"salenum":777,"sellerid":9,"subhead":"每个中秋都不能简单,无论身在何处,你总需要一块饼让生活更圆满,京东月饼让爱更圆满京东自营,闪电配送,更多惊喜,快用手指戳一下","title":"北京稻香村 稻香村中秋节月饼 老北京月饼礼盒655g"},{"bargainPrice":111.99,"createtime":"2017-10-14T21:48:08","detailUrl":"https://item.m.jd.com/product/4719303.html?utm_source=androidapp&utm_medium=appshare&utm_campaign=t_335139774&utm_term=QQfriends","images":"https://m.360buyimg.com/n0/jfs/t9004/210/1160833155/647627/ad6be059/59b4f4e1N9a2b1532.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t7504/338/63721388/491286/f5957f53/598e95f1N7f2adb87.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t7441/10/64242474/419246/adb30a7d/598e95fbNd989ba0a.jpg!q70.jpg","itemtype":2,"pid":15,"price":233.99,"pscid":1,"salenum":666,"sellerid":8,"subhead":"每个中秋都不能简单,无论身在何处,你总需要一块饼让生活更圆满,京东月饼让爱更圆满京东自营,闪电配送,更多惊喜,快用手指戳一下","title":"北京稻香村 稻香村中秋节月饼 老北京月饼礼盒655g"},{"bargainPrice":111.99,"createtime":"2017-10-03T23:43:53","detailUrl":"https://item.m.jd.com/product/4719303.html?utm_source=androidapp&utm_medium=appshare&utm_campaign=t_335139774&utm_term=QQfriends","images":"https://m.360buyimg.com/n0/jfs/t9004/210/1160833155/647627/ad6be059/59b4f4e1N9a2b1532.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t7504/338/63721388/491286/f5957f53/598e95f1N7f2adb87.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t7441/10/64242474/419246/adb30a7d/598e95fbNd989ba0a.jpg!q70.jpg","itemtype":0,"pid":12,"price":256,"pscid":1,"salenum":0,"sellerid":5,"subhead":"每个中秋都不能简单,无论身在何处,你总需要一块饼让生活更圆满,京东月饼让爱更圆满京东自营,闪电配送,更多惊喜,快用手指戳一下","title":"北京稻香村 稻香村中秋节月饼 老北京月饼礼盒655g"}] * page : 1 */ private String msg; private String code; private String page; private List<DataBean> data; public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } public String getCode() { return code; } public void setCode(String code) { this.code = code; } public String getPage() { return page; } public void setPage(String page) { this.page = page; } public List<DataBean> getData() { return data; } public void setData(List<DataBean> data) { this.data = data; } public static class DataBean { /** * bargainPrice : 111.99 * createtime : 2017-10-03T23:53:28 * detailUrl : https://item.m.jd.com/product/4719303.html?utm_source=androidapp&utm_medium=appshare&utm_campaign=t_335139774&utm_term=QQfriends * images : https://m.360buyimg.com/n0/jfs/t9004/210/1160833155/647627/ad6be059/59b4f4e1N9a2b1532.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t7504/338/63721388/491286/f5957f53/598e95f1N7f2adb87.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t7441/10/64242474/419246/adb30a7d/598e95fbNd989ba0a.jpg!q70.jpg * itemtype : 0 * pid : 6 * price : 7.99 * pscid : 1 * salenum : 234 * sellerid : 22 * subhead : 每个中秋都不能简单,无论身在何处,你总需要一块饼让生活更圆满,京东月饼让爱更圆满京东自营,闪电配送,更多惊喜,快用手指戳一下 * title : 北京稻香村 稻香村中秋节月饼 老北京月饼礼盒655g */ private double bargainPrice; private String createtime; private String detailUrl; private String images; private int itemtype; private int pid; private double price; private int pscid; private int salenum; private int sellerid; private String subhead; private String title; private boolean isCheck; public boolean getisCheck() { return isCheck; } public void setCheck(boolean ischeck) { isCheck = ischeck; } public double getBargainPrice() { return bargainPrice; } public void setBargainPrice(double bargainPrice) { this.bargainPrice = bargainPrice; } public String getCreatetime() { return createtime; } public void setCreatetime(String createtime) { this.createtime = createtime; } public String getDetailUrl() { return detailUrl; } public void setDetailUrl(String detailUrl) { this.detailUrl = detailUrl; } public String getImages() { return images; } public void setImages(String images) { this.images = images; } public int getItemtype() { return itemtype; } public void setItemtype(int itemtype) { this.itemtype = itemtype; } public int getPid() { return pid; } public void setPid(int pid) { this.pid = pid; } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; } public int getPscid() { return pscid; } public void setPscid(int pscid) { this.pscid = pscid; } public int getSalenum() { return salenum; } public void setSalenum(int salenum) { this.salenum = salenum; } public int getSellerid() { return sellerid; } public void setSellerid(int sellerid) { this.sellerid = sellerid; } public String getSubhead() { return subhead; } public void setSubhead(String subhead) { this.subhead = subhead; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } } }9.主布局+条布局:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.example.myshopping.view.MainActivity"> <LinearLayout android:layout_width="match_parent" android:layout_height="100px" android:orientation="horizontal"> <TextView android:layout_width="0dp" android:layout_weight="1" android:layout_height="wrap_content" android:layout_gravity="center" android:gravity="center" android:text="《返回"/> <ImageView android:id="@+id/my_icon" android:layout_width="0dp" android:layout_weight="1" android:layout_height="wrap_content" android:layout_gravity="center" android:gravity="center" android:src="@drawable/icon"/> <TextView android:layout_width="0dp" android:layout_weight="1" android:layout_gravity="center" android:gravity="center" android:layout_height="wrap_content" android:text="完成"/> </LinearLayout> <android.support.v7.widget.RecyclerView android:id="@+id/my_rcy" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1"> </android.support.v7.widget.RecyclerView> <LinearLayout android:layout_width="match_parent" android:layout_height="100px" android:orientation="horizontal"> <CheckBox android:id="@+id/my_cb" android:layout_width="0dp" android:layout_weight="1" android:layout_height="wrap_content" android:layout_gravity="center" android:gravity="center" android:text="全选"/> <TextView android:id="@+id/my_zj" android:layout_width="0dp" android:layout_weight="1" android:layout_height="wrap_content" android:layout_gravity="center" android:gravity="center" android:text="总价:"/> <TextView android:id="@+id/my_js" android:layout_width="0dp" android:layout_weight="1" android:layout_gravity="center" android:gravity="center" android:layout_height="wrap_content" android:text="件数:"/> </LinearLayout> </LinearLayout>
<?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"> <LinearLayout android:layout_width="match_parent" android:layout_height="150px" android:orientation="horizontal" android:padding="10px"> <CheckBox android:id="@+id/rcy_cb" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical"/> <ImageView android:id="@+id/rcy_img" android:layout_width="150px" android:layout_height="150px" android:src="@mipmap/ic_launcher" android:layout_marginLeft="10px" android:layout_gravity="center_vertical"/> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" android:layout_marginLeft="20px" android:paddingTop="20px"> <TextView android:id="@+id/rcy_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="北京稻香村 稻香村中秋节月饼" android:layout_marginLeft="20px"/> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_marginLeft="20px" > <TextView android:id="@+id/rcy_price" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="118.0" /> <Button android:id="@+id/rcy_jian" android:layout_width="50px" android:layout_height="wrap_content" android:text="-" android:layout_marginLeft="20px"/> <TextView android:id="@+id/rcy_num" android:layout_width="50px" android:layout_height="wrap_content" android:gravity="center_horizontal" android:text="15"/> <Button android:id="@+id/rcy_add" android:layout_width="50px" android:layout_height="wrap_content" android:text="+"/> <ImageView android:id="@+id/rcy_delete" android:layout_width="50px" android:layout_height="50px" android:src="@drawable/delete" android:layout_marginLeft="20px" android:layout_gravity="center_vertical" /> </LinearLayout> </LinearLayout> </LinearLayout> </LinearLayout>