购物车页面实现 :Okhttp+mvp+RecyclerView(更新)

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层请求数据的方法,将接口urlp层传到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>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值