MVP-详情-自定义view-购物车

依赖:

  compile 'com.squareup.retrofit2:retrofit:2.0.0-beta4'//Retrofit2所需要的包
    compile 'com.squareup.retrofit2:converter-gson:2.0.0-beta4'//ConverterFactory的Gson依赖包
    compile 'com.squareup.retrofit2:converter-scalars:2.0.0-beta4'//ConverterFactory的String依赖包
    compile 'io.reactivex.rxjava2:rxjava:2.1.3'
    compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
    compile 'com.squareup.retrofit2:adapter-rxjava2:2.3.0'
    compile 'de.greenrobot:eventbus:3.0.0-beta1'
    compile 'com.facebook.fresco:fresco:0.11.0'
    //拦截器的依赖
    compile 'com.squareup.okhttp3:logging-interceptor:3.9.1'

  

工具类:net

public interface OnNetListener<T> {
    public void onSuccess(T t);

    public void onFailure(Exception e);
}

RetrofitHelper ::::::

public class RetrofitHelper {
    private static Retrofit retrofit;

    private static ServiceApi serviceApi;

    /**
     * 初始化Retrofit 单例模式
     */
    private static Retrofit getRetrofit() {
        //线程安全
        if (retrofit == null) {
            synchronized (RetrofitHelper.class) {
                if (retrofit == null) {
                    //设置拦截器
                    HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
                    logging.setLevel(HttpLoggingInterceptor.Level.BODY);
                    OkHttpClient client = new OkHttpClient.Builder()
                            .addInterceptor(new MyInterceptor())
                            .connectTimeout(5, TimeUnit.SECONDS)//设置连接超时
                            .addInterceptor(logging)//添加拦截器
                            //.addNetworkInterceptor() //网路拦截器
                            .build();


                    retrofit = new Retrofit.Builder()
                            .baseUrl(Urls.BASE_URL)
                            .client(client)
                            .addConverterFactory(GsonConverterFactory.create())
                            .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                            .build();
                }
            }
        }

        return retrofit;
    }


    public static ServiceApi getAPI() {
        if (serviceApi == null) {
            synchronized (RetrofitHelper.class) {
                if (serviceApi == null) {
                    serviceApi = getRetrofit().create(ServiceApi.class);
                }
            }
        }
        return serviceApi;
    }

    /**
     * 添加公共参数拦截器
     */
    static class MyInterceptor implements Interceptor {
        @Override
        public Response intercept(Chain chain) throws IOException {
            Request request = chain.request();
            HttpUrl httpUrl = request
                    .url()
                    .newBuilder()
                    .addQueryParameter("source", "android")
                    .build();
            Request requestNew = request
                    .newBuilder()
                    .url(httpUrl)
                    .build();
            return chain.proceed(requestNew);
        }
    }
}


ServiceApi :


public interface ServiceApi {
    //商品列表
    @GET(Urls.PRODUCTDETAIL)
    Observable<ProductDetailBean> getProductDetail(@Query("pid") String pid);

    //添加购物车
    @GET(Urls.ADDCART)
    Observable<AddCartBean> getAddCart(@Query("uid") String uid, @Query("pid") String pid);

    //查询购物车
    @GET(Urls.GETCARTS)
    Observable<CartBean> getCarts(@Query("uid") String uid);

}

Urls :---
public class Urls {
    public static final String BASE_URL = "https://www.zhaoapi.cn/";
    //商品详情
    public static final String PRODUCTDETAIL = "product/getProductDetail";
    //添加购物车
    public static final String ADDCART = "product/addCart";
    //查询购物车
    public static final String GETCARTS = "product/getCarts";

}

  

M层
IProductDetaiModell添加和详情接口

public interface IProductDetaiModell {
    public void getDetail(String pid, OnNetListener<ProductDetailBean> onNetListener);

    public void addCart(String uid, String pid, OnNetListener<AddCartBean> onNetListener);
}


ProductDetailModel M方法



public class ProductDetailModel implements IProductDetaiModell {

    @Override
    public void getDetail(String pid, final OnNetListener<ProductDetailBean> onNetListener) {
        ServiceApi serviceApi = RetrofitHelper.getAPI();
        serviceApi.getProductDetail(pid)
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Consumer<ProductDetailBean>() {
                    @Override
                    public void accept(ProductDetailBean productDetailBean) throws Exception {
                        onNetListener.onSuccess(productDetailBean);
                    }
                }, new Consumer<Throwable>() {
                    @Override
                    public void accept(Throwable throwable) throws Exception {
                        onNetListener.onFailure((Exception) throwable);
                    }
                });
    }

    @Override
    public void addCart(String uid, String pid, final OnNetListener<AddCartBean> onNetListener) {
        ServiceApi serviceApi = RetrofitHelper.getAPI();
        serviceApi.getAddCart(uid, pid)
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Consumer<AddCartBean>() {
                    @Override
                    public void accept(AddCartBean addCartBean) throws Exception {
                        onNetListener.onSuccess(addCartBean);
                    }
                }, new Consumer<Throwable>() {
                    @Override
                    public void accept(Throwable throwable) throws Exception {
                        onNetListener.onFailure((Exception) throwable);
                    }
                });

    }
}


购物车M层接口和方法
public interface ICartModel {
    public void getCart(String uid, OnNetListener<CartBean> onNetListener);
}


public class CartModel implements ICartModel {
    @Override
    public void getCart(String uid, final OnNetListener<CartBean> onNetListener) {
        ServiceApi serviceApi = RetrofitHelper.getAPI();
        serviceApi.getCarts(uid)
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Consumer<CartBean>() {
                    @Override
                    public void accept(CartBean cartBean) throws Exception {
                        onNetListener.onSuccess(cartBean);
                    }
                }, new Consumer<Throwable>() {
                    @Override
                    public void accept(Throwable throwable) throws Exception {
                        onNetListener.onFailure((Exception) throwable);
                    }
                });
    }
}

  

P层 处理逻辑
//可写可不写
public interface BasePresenter {
    /**
     * 当页面销毁的时候,需要把View=null,
     * 然后调用 System.gc();//尽管不会马上回收,只是通知jvm可以回收了,等jvm高兴就会回收
     */
    void detachView();
}


public class ProductDetailPresenter implements BasePresenter {

    private final IProductDetaiModell iProductDetaiModell;
    private IDetailView iDetailView;

    public ProductDetailPresenter(IDetailView iDetailView) {
        this.iDetailView = iDetailView;
        iProductDetaiModell = new ProductDetailModel();
    }

    public void getDetail() {
        iProductDetaiModell.getDetail("100", new OnNetListener<ProductDetailBean>() {
            @Override
            public void onSuccess(ProductDetailBean productDetailBean) {
                iDetailView.showDetail(productDetailBean);
            }

            @Override
            public void onFailure(Exception e) {

            }
        });
    }

    public void addCart() {
        iProductDetaiModell.addCart("71", "100", new OnNetListener<AddCartBean>() {
            @Override
            public void onSuccess(AddCartBean addCartBean) {
                iDetailView.addCart(addCartBean);
            }

            @Override
            public void onFailure(Exception e) {

            }
        });
    }

    /**
     * 当页面销毁的时候,需要把View=null,
     * 然后调用 System.gc();//尽管不会马上回收,只是通知jvm可以回收了,等jvm高兴就会回收
     */
    @Override
    public void detachView() {
        //防止内存泄露
        if (iDetailView != null) {
            iDetailView = null;
            System.gc();
        }
    }
}


//购物车p层

public class CartPresenter implements BasePresenter {

    private final ICartModel iCartModel;
    private ICartView iCartView;

    public CartPresenter(ICartView iCartView) {
        this.iCartView = iCartView;
        iCartModel = new CartModel();
    }

    public void getCarts() {
        iCartModel.getCart("71", new OnNetListener<CartBean>() {
            @Override
            public void onSuccess(CartBean cartBean) {
                iCartView.getCarts(cartBean);
            }

            @Override
            public void onFailure(Exception e) {

            }
        });
    }

    @Override
    public void detachView() {
        //防止内存泄露
        if (iCartView != null) {
            iCartView = null;
            System.gc();
        }
    }
}

  

V层
接口
详情 添加购物车
public interface IDetailView {
    public void showDetail(ProductDetailBean productDetailBean);

    public void addCart(AddCartBean addCartBean);
}

查询购物车
public interface ICartView {
    public void getCarts(CartBean cartBean);
}

可写可不写的一个类=====
public abstract class BaseMvpActivity extends AppCompatActivity{
    private BasePresenter presenter = null;

    /**
     * 绑定presenter,主要用于销毁工作
     *
     * @return
     */
    protected abstract BasePresenter bindPresenter();

    /**
     * 如果重写了此方法,一定要调用super.onDestroy();
     */
    @Override
    public void onDestroy() {
        super.onDestroy();
        if (presenter != null) {
            presenter.detachView();
            presenter = null;

        }
    }
}

  

详情和添加购物车的主类
public class MainActivity extends AppCompatActivity implements View.OnClickListener, IDetailView {

    private SimpleDraweeView mSdv;
    /**
     * ¥19.90
     */
    private TextView mTvDetailPrice;
    /**
     * ¥10000.0
     */
    private TextView mTvDetailYuPrice;
    /**
     * 全球购 新款Apple MacBook Pro 苹果笔记本电脑 银色VP2新13英寸Bar i5/8G/256G
     */
    private TextView mTvDetailTitle;
    /**
     * 购买电脑办公部分商品满1元返火车票5元优惠券(返完即止)
     */
    private TextView mTvDetailSubhead;
    private TextView mTvCarts;
    /**
     * 加入购物车
     */
    private Button mBtAddcart;
    private ProductDetailPresenter productDetailPresenter;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
        productDetailPresenter = new ProductDetailPresenter(this);
        productDetailPresenter.getDetail();
    }

    private void initView() {
        mSdv = (SimpleDraweeView) findViewById(R.id.sdv);
        mTvDetailPrice = (TextView) findViewById(R.id.tv_detail_price);
        mTvDetailYuPrice = (TextView) findViewById(R.id.tv_detail_yu_price);
        mTvDetailTitle = (TextView) findViewById(R.id.tv_detail_title);
        mTvDetailSubhead = (TextView) findViewById(R.id.tv_detail_subhead);
        mTvCarts = (TextView) findViewById(R.id.tv_carts);
        mBtAddcart = (Button) findViewById(R.id.bt_addcart);
        mBtAddcart.setOnClickListener(this);
        mSdv.setOnClickListener(this);
        mTvDetailPrice.setOnClickListener(this);
        mTvDetailYuPrice.setOnClickListener(this);
        mTvDetailTitle.setOnClickListener(this);
        mTvDetailSubhead.setOnClickListener(this);
        mTvCarts.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            default:
                break;
            case R.id.bt_addcart:
                //添加购物车
                productDetailPresenter.addCart();
                break;
            case R.id.sdv:
                break;
            case R.id.tv_detail_price:
                break;
            case R.id.tv_detail_yu_price:
                break;
            case R.id.tv_detail_title:
                break;
            case R.id.tv_detail_subhead:
                break;
            case R.id.tv_carts:
                //跳转到购物车
                Intent intent = new Intent(MainActivity.this, CartActivity.class);
                startActivity(intent);
                break;
        }
    }



    @Override
    public void showDetail(ProductDetailBean productDetailBean) {
        String images = productDetailBean.getData().getImages();
        String[] strings = images.split("\\|");
        mSdv.setImageURI(strings[0]);
        mTvDetailPrice.setText("¥" + productDetailBean.getData().getBargainPrice());
        mTvDetailYuPrice.setText("¥" + productDetailBean.getData().getPrice());
        //添加删除线
        mTvDetailYuPrice.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG);
        mTvDetailTitle.setText(productDetailBean.getData().getTitle());
        mTvDetailSubhead.setText(productDetailBean.getData().getSubhead());
    }

    @Override
    public void addCart(AddCartBean addCartBean) {
        if ("0".equals(addCartBean.getCode())) {
            Toast.makeText(getApplicationContext(), addCartBean.getMsg(), Toast.LENGTH_SHORT).show();
        } else {
            Toast.makeText(getApplicationContext(), addCartBean.getMsg(), Toast.LENGTH_SHORT).show();
        }
    }
}


//查询购物车的主类
public class CartActivity extends AppCompatActivity implements ICartView {

    private ExpandableListView mElv;
    private CheckBox mCbAll;
    /**
     * 全选
     */
    private TextView mTvQuxuan;
    /**
     * 合计 :¥550.90
     */
    private TextView mTvPrice;
    /**
     * 总额:582.70  立减:¥31.80
     */
    private TextView mTvCartsPrice;
    /**
     * 去结算(0)
     */
    private TextView mTvNum;
    private List<List<CartBean.DataBean.ListBean>> lists;
    private MyElvAdapter myElvAdapter;
    private CartPresenter cartPresenter;



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_cart);
        initView();
        EventBus.getDefault().register(this);

        cartPresenter = new CartPresenter(this);
        cartPresenter.getCarts();
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        EventBus.getDefault().unregister(this);
    }

    @Override
    public void getCarts(CartBean cartBean) {
        List<CartBean.DataBean> dataBeans = cartBean.getData();
        lists = new ArrayList<>();
        for (int i = 0; i < dataBeans.size(); i++) {
            List<CartBean.DataBean.ListBean> list = dataBeans.get(i).getList();
            lists.add(list);
        }
        //设置适配器
        myElvAdapter = new MyElvAdapter(this, dataBeans, lists);
        mElv.setAdapter(myElvAdapter);

        for (int i = 0; i < dataBeans.size(); i++) {
            //默认二级列表展开
            mElv.expandGroup(i);
        }
        //取消小箭头
        mElv.setGroupIndicator(null);
    }


    private void initView() {
        mElv = (ExpandableListView) findViewById(R.id.elv);
        mCbAll = (CheckBox) findViewById(R.id.cb_All);
        mTvQuxuan = (TextView) findViewById(R.id.tv_quxuan);
        mTvPrice = (TextView) findViewById(R.id.tv_price);
        mTvCartsPrice = (TextView) findViewById(R.id.tv_carts_price);
        mTvNum = (TextView) findViewById(R.id.tv_num);
        //全选
        mCbAll.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                myElvAdapter.changeAllListCbState(mCbAll.isChecked());
            }
        });
    }

    @Subscribe
    public void onMessageEvent(MessageEvent event) {
        mCbAll.setChecked(event.isChecked());
    }

    @Subscribe
    public void onMessageEvent(PriceAndCountEvent event) {
        mTvPrice.setText("合计:¥" + event.getPrice() * event.getCount());
        mTvCartsPrice.setText("总额:¥" + event.getPrice() * event.getCount());
        mTvNum.setText("去结算(" + event.getCount() + ")");
    }
}

自定义view
public class AddDeleteView extends LinearLayout {
    private OnAddDelClickListener listener;
    private EditText etNumber;

    //对外提供一个点击的回调接口
    public interface OnAddDelClickListener {
        void onAddClick(View v);

        void onDelClick(View v);
    }

    public void setOnAddDelClickListener(OnAddDelClickListener listener) {
        if (listener != null) {
            this.listener = listener;
        }
    }

    public AddDeleteView(Context context) {
        this(context, null);
    }

    public AddDeleteView(Context context, @Nullable AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public AddDeleteView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);

        initView(context, attrs, defStyleAttr);
    }

    private void initView(Context context, AttributeSet attrs, int defStyleAttr) {
        View.inflate(context, R.layout.adddelete, this);
        TextView txtDelete = (TextView) findViewById(R.id.tv_delete);
        TextView txtAdd = (TextView) findViewById(R.id.tv_add);
        etNumber = (EditText) findViewById(R.id.ed_num);


        TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.AddDeleteViewStyle);

        String leftText = typedArray.getString(R.styleable.AddDeleteViewStyle_left_text);
        String rightText = typedArray.getString(R.styleable.AddDeleteViewStyle_right_text);
        String middleText = typedArray.getString(R.styleable.AddDeleteViewStyle_middle_text);

        txtDelete.setText(leftText);
        txtAdd.setText(rightText);
        etNumber.setText(middleText);

        //回收
        typedArray.recycle();


        txtDelete.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                listener.onDelClick(view);
            }
        });

        txtAdd.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                listener.onAddClick(view);
            }
        });

    }

    //对外提供一个修改数字的方法
    public void setNumber(int number) {
        if (number > 0) {
            etNumber.setText(number + "");
        }
    }

    //对外提供一个获取当前数字的方法
    public int getNumber() {
        String string = etNumber.getText().toString();
        int i = Integer.parseInt(string);
        return i;
    }
}

  

购物车适配器
public class MyElvAdapter extends BaseExpandableListAdapter {
    private Context context;
    private List<CartBean.DataBean> groupList;
    private List<List<CartBean.DataBean.ListBean>> childList;
    private LayoutInflater inflater;

    public MyElvAdapter(Context context, List<CartBean.DataBean> groupList, List<List<CartBean.DataBean.ListBean>> childList) {
        this.context = context;
        this.groupList = groupList;
        this.childList = childList;
        inflater = LayoutInflater.from(context);
    }

    @Override
    public int getGroupCount() {
        return groupList.size();
    }

    @Override
    public int getChildrenCount(int groupPosition) {
        return childList.get(groupPosition).size();
    }

    @Override
    public Object getGroup(int groupPosition) {
        return groupList.get(groupPosition);
    }

    @Override
    public Object getChild(int groupPosition, int childPosition) {
        return childList.get(groupPosition).get(childPosition);
    }

    @Override
    public long getGroupId(int groupPosition) {
        return groupPosition;
    }

    @Override
    public long getChildId(int groupPosition, int childPosition) {
        return childPosition;
    }

    @Override
    public boolean hasStableIds() {
        return false;
    }

    @Override
    public View getGroupView(final int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
        View view;
        final GroupViewHolder holder;
        if (convertView == null) {
            holder = new GroupViewHolder();
            view = inflater.inflate(R.layout.cart_group_item, null);
            holder.cb_group = view.findViewById(R.id.cb_group);
            holder.tv_dian = view.findViewById(R.id.gou_dian);
            view.setTag(holder);
        } else {
            view = convertView;
            holder = (GroupViewHolder) view.getTag();
        }
        final CartBean.DataBean dataBean = groupList.get(groupPosition);
        holder.cb_group.setChecked(dataBean.isChecked());
        holder.tv_dian.setText(dataBean.getSellerName());
        //一级列表的Checkbox
        holder.cb_group.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                dataBean.setChecked(holder.cb_group.isChecked());
                //当一级选中时,改变二级列表CheckBox状态
                changeChildCbState(groupPosition, holder.cb_group.isChecked());
                //将对应的数量和价格传到PriceAndCountEvent
                EventBus.getDefault().post(computer());
                //当一级的全部选中是,改变全选CheckBox状态
                changeAllCbState(isAllGroupCbSelected());
                //刷新列表
                notifyDataSetChanged();
            }
        });
        return view;
    }

    @Override
    public View getChildView(final int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
        View view;
        final ChildViewHolder holder;
        if (convertView == null) {
            holder = new ChildViewHolder();
            view = inflater.inflate(R.layout.cart_child_item, null);
            holder.cb_child = view.findViewById(R.id.cb_child);
            holder.del = view.findViewById(R.id.del);
            holder.sdv = view.findViewById(R.id.child_sdv);
            holder.adv_main = view.findViewById(R.id.adv_main);
            holder.tv_info = view.findViewById(R.id.child_info);
            holder.tv_price = view.findViewById(R.id.child_price);
            holder.tv_tit = view.findViewById(R.id.child_tit);
            view.setTag(holder);
        } else {
            view = convertView;
            holder = (ChildViewHolder) view.getTag();
        }
        final CartBean.DataBean.ListBean listBean = childList.get(groupPosition).get(childPosition);
        holder.cb_child.setChecked(listBean.isChecked());
        String[] strings = listBean.getImages().split("\\!");
        holder.sdv.setImageURI(strings[0]);
        holder.tv_tit.setText(listBean.getSubhead());
        holder.tv_info.setText(listBean.getTitle());
        holder.tv_price.setText("¥" + listBean.getBargainPrice());
        //给二级CheckBox设置点击事件
        holder.cb_child.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //设置该条目对象里的checked属性值
                listBean.setChecked(holder.cb_child.isChecked());
                PriceAndCountEvent priceAndCountEvent = computer();
                EventBus.getDefault().post(priceAndCountEvent);

                if (holder.cb_child.isChecked()) {
                    //当前checkbox是选中状态
                    if (isAllChildCbSelected(groupPosition)) {
                        changeGroupCbState(groupPosition, true);
                        changeAllCbState(isAllGroupCbSelected());
                    }
                } else {
                    changeGroupCbState(groupPosition, false);
                    changeAllCbState(isAllGroupCbSelected());
                }
                notifyDataSetChanged();
            }
        });
        //自定义View加减号
        holder.adv_main.setOnAddDelClickListener(new AddDeleteView.OnAddDelClickListener() {
            @Override
            public void onAddClick(View v) {
                //加号
                int num = listBean.getNum();
                holder.adv_main.setNumber(++num);
                listBean.setNum(num);
                if (holder.cb_child.isChecked()) {
                    PriceAndCountEvent priceAndCountEvent = computer();
                    EventBus.getDefault().post(computer());
                }
            }

            @Override
            public void onDelClick(View v) {
                //减号
                int num = listBean.getNum();
                if (num == 1) {
                    return;
                }
                holder.adv_main.setNumber(--num);
                listBean.setNum(num);
                if (holder.cb_child.isChecked()) {
                    PriceAndCountEvent priceAndCountEvent = computer();
                    EventBus.getDefault().post(computer());
                }
            }
        });

        holder.del.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View view) {
                AlertDialog.Builder builder = new AlertDialog.Builder(context);
                builder.setIcon(R.mipmap.ic_launcher_round)
                        .setTitle("删除商品")
                        .setMessage("确定删除商品吗?");
                builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        List<CartBean.DataBean.ListBean> datasBeen = childList.get(groupPosition);
                        CartBean.DataBean.ListBean remove = datasBeen.remove(childPosition);
                        if (datasBeen.size() == 0) {
                            childList.remove(groupPosition);
                            groupList.remove(groupPosition);
                        }
                        EventBus.getDefault().post(computer());
                        notifyDataSetChanged();
                    }
                });
                builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        Toast.makeText(context, "您取消了删除" + which, Toast.LENGTH_SHORT).show();
                    }
                });
                builder.show();
                return true;
            }
        });
        return view;
    }

    @Override
    public boolean isChildSelectable(int groupPosition, int childPosition) {
        return true;
    }

    class GroupViewHolder {
        CheckBox cb_group;
        TextView tv_dian;
    }

    class ChildViewHolder {
        LinearLayout del;
        CheckBox cb_child;
        SimpleDraweeView sdv;
        TextView tv_tit;
        TextView tv_info;
        TextView tv_price;
        AddDeleteView adv_main;
    }

    /**
     * 改变全选CheckBox状态
     *
     * @param flag
     */
    private void changeAllCbState(boolean flag) {
        MessageEvent messageEvent = new MessageEvent();
        messageEvent.setChecked(flag);
        EventBus.getDefault().post(messageEvent);
    }

    /**
     * 改变二级列表CheckBox状态
     *
     * @param groupPosition
     * @param flag
     */
    private void changeChildCbState(int groupPosition, boolean flag) {
        List<CartBean.DataBean.ListBean> listBeans = childList.get(groupPosition);
        for (int i = 0; i < listBeans.size(); i++) {
            CartBean.DataBean.ListBean listBean = listBeans.get(i);
            listBean.setChecked(flag);
        }
    }

    /**
     * 改变一级列表CheckBox状态
     *
     * @param groupPosition
     * @param flag
     */
    private void changeGroupCbState(int groupPosition, boolean flag) {
        CartBean.DataBean dataBean = groupList.get(groupPosition);
        dataBean.setChecked(flag);
    }

    /**
     * 判断一级列表是否全部选中
     *
     * @return
     */
    public boolean isAllGroupCbSelected() {
        for (int i = 0; i < groupList.size(); i++) {
            CartBean.DataBean dataBean = groupList.get(i);
            if (!dataBean.isChecked()) {
                return false;
            }
        }
        return true;
    }

    /**
     * 判断二级列表是否全部选中
     *
     * @param groupPosition
     * @return
     */
    public boolean isAllChildCbSelected(int groupPosition) {
        List<CartBean.DataBean.ListBean> listBeans = childList.get(groupPosition);
        for (int i = 0; i < listBeans.size(); i++) {
            CartBean.DataBean.ListBean listBean = listBeans.get(i);
            if (!listBean.isChecked()) {
                return false;
            }
        }
        return true;
    }

    /**
     * 设置全选、反选
     *
     * @param flag
     */
    public void changeAllListCbState(boolean flag) {
        for (int i = 0; i < groupList.size(); i++) {
            //改变一级列表CheckBox状态
            changeGroupCbState(i, flag);
            //改变二级列表CheckBox状态
            changeChildCbState(i, flag);
        }
        //将数量和价格传值
        EventBus.getDefault().post(computer());
        //刷新列表
        notifyDataSetChanged();
    }

    /**
     * 计算列表中选中的钱和数量
     *
     * @return
     */
    private PriceAndCountEvent computer() {
        int count = 0;
        int price = 0;
        for (int i = 0; i < childList.size(); i++) {
            List<CartBean.DataBean.ListBean> listBeans = childList.get(i);
            for (int j = 0; j < listBeans.size(); j++) {
                CartBean.DataBean.ListBean listBean = listBeans.get(j);
                if (listBean.isChecked()) {
                    count += listBean.getNum();
                    price += listBean.getNum() * listBean.getPrice();
                }
            }
        }
        PriceAndCountEvent priceAndCountEvent = new PriceAndCountEvent();
        priceAndCountEvent.setCount(count);
        priceAndCountEvent.setPrice(price);
        return priceAndCountEvent;
    }
}



Myapp里的图片加载及磁盘缓存
public class Myapp extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        Fresco.initialize(this);
        //配置磁盘缓存
        DiskCacheConfig diskSmallCacheConfig = DiskCacheConfig.newBuilder(this)
                .setBaseDirectoryPath(this.getCacheDir())//缓存图片基路径
                .setBaseDirectoryName(getString(R.string.app_name))//文件夹名
                .build();
        ImagePipelineConfig imagePipelineConfig = ImagePipelineConfig.newBuilder(this)
                .setBitmapsConfig(Bitmap.Config.RGB_565)
                .setSmallImageDiskCacheConfig(diskSmallCacheConfig)
                .build();
    }
}

  

布局:
values下的attrs.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <declare-styleable name="AddDeleteViewStyle">
        <attr name="left_text" format="string" />
        <attr name="right_text" format="string" />
        <attr name="middle_text" format="string" />
    </declare-styleable>
</resources>

自定义加减:adddelete
<?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">

    <TextView
        android:id="@+id/tv_delete"
        android:layout_width="31dp"
        android:layout_height="31dp"
        android:background="#999999"
        android:gravity="center"
        android:text="-"
        android:textSize="20sp" />

    <EditText
        android:id="@+id/ed_num"
        android:layout_width="30dp"
        android:layout_height="30dp"
        android:background="@null"
        android:gravity="center" />

    <TextView
        android:id="@+id/tv_add"
        android:layout_width="31dp"
        android:layout_height="31dp"
        android:background="#999999"
        android:gravity="center"
        android:text="+"
        android:textSize="20sp" />
</LinearLayout>


详情main
<RelativeLayout 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"
    xmlns:fresco="http://schemas.android.com/apk/res-auto"
    >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">

            <TextView
                android:layout_width="30dp"
                android:layout_height="30dp"
                android:layout_centerVertical="true"
                android:background="@drawable/leftjiantou" />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerInParent="true"
                android:text="商品详情"
                android:textSize="25sp" />

            <TextView
                android:layout_width="30dp"
                android:layout_height="30dp"
                android:layout_alignParentRight="true"
                android:layout_centerVertical="true"
                android:background="@drawable/sandian" />
        </RelativeLayout>

        <com.facebook.drawee.view.SimpleDraweeView
            android:id="@+id/sdv"
            android:layout_width="match_parent"
            android:layout_height="400dp"
            fresco:failureImage="@mipmap/ic_launcher"
            fresco:placeholderImage="@mipmap/ic_launcher"
            fresco:progressBarImage="@mipmap/ic_launcher" />

        <TextView
            android:id="@+id/tv_detail_price"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="15dp"
            android:text="¥19.90"
            android:textSize="25sp" />

        <TextView
            android:id="@+id/tv_detail_yu_price"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="¥10000.0" />

        <TextView
            android:id="@+id/tv_detail_title"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="15dp"
            android:text="全球购 新款Apple MacBook Pro 苹果笔记本电脑 银色VP2新13英寸Bar i5/8G/256G" />

        <TextView
            android:id="@+id/tv_detail_subhead"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="15dp"
            android:text="购买电脑办公部分商品满1元返火车票5元优惠券(返完即止)"
            android:textColor="#ff00" />

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="20dp"
            android:text="白条 【白条支付】首单立减5元" />

    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="70dp"
        android:layout_alignParentBottom="true">

        <TextView
            android:layout_width="70dp"
            android:layout_height="match_parent"
            android:background="@drawable/dsa01" />

        <TextView
            android:layout_width="70dp"
            android:layout_height="match_parent"
            android:background="@drawable/dsa02" />

        <TextView
            android:id="@+id/tv_carts"
            android:layout_width="70dp"
            android:layout_height="match_parent"
            android:background="@drawable/dsa03" />

        <Button
            android:id="@+id/bt_addcart"
            android:layout_width="150dp"
            android:layout_height="match_parent"
            android:background="#FEBF14"
            android:text="加入购物车"
            android:textColor="#fff"
            android:textSize="20sp" />

        <Button
            android:layout_width="120dp"
            android:layout_height="match_parent"
            android:background="#F23030"
            android:text="立即购买"
            android:textColor="#fff"
            android:textSize="20sp" />
    </LinearLayout>

</RelativeLayout>

//购物车cart
<?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"
    >

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <TextView
            android:layout_width="30dp"
            android:layout_height="30dp"
            android:layout_centerVertical="true"
            android:background="@drawable/leftjiantou" />

        <TextView
            android:layout_width="match_parent"
            android:layout_height="40dp"
            android:gravity="center"
            android:text="购物车"
            android:textColor="#000"
            android:textSize="25sp" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_centerVertical="true"
            android:layout_marginRight="20dp"
            android:text="编辑" />
    </RelativeLayout>


    <ExpandableListView
        android:id="@+id/elv"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1" />

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="70dp"
        android:layout_alignParentBottom="true"
        android:background="@android:color/white"
        android:gravity="center_vertical">

        <CheckBox
            android:id="@+id/cb_All"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:layout_marginLeft="10dp"
            android:focusable="false" />

        <TextView
            android:id="@+id/tv_quxuan"
            android:layout_width="wrap_content"
            android:layout_height="50dp"
            android:layout_centerVertical="true"
            android:layout_marginLeft="10dp"
            android:layout_toRightOf="@+id/cb_All"
            android:gravity="center_vertical"
            android:text="全选"
            android:textSize="20sp" />

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_toRightOf="@id/tv_quxuan"
            android:orientation="vertical">

            <TextView
                android:id="@+id/tv_price"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="10dp"
                android:text="合计 :¥550.90"
                android:textSize="25dp" />

            <TextView
                android:id="@+id/tv_carts_price"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="10dp"
                android:text="总额:582.70  立减:¥31.80" />

        </LinearLayout>

        <TextView
            android:id="@+id/tv_num"
            android:layout_width="120dp"
            android:layout_height="match_parent"
            android:layout_alignParentRight="true"
            android:background="@android:color/holo_red_dark"
            android:gravity="center"
            android:padding="10dp"
            android:text="去结算(0)"
            android:textColor="@android:color/white" />
    </RelativeLayout>

</LinearLayout>

二级列表的布局
child:
<?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"
    android:id="@+id/del"
    android:layout_width="match_parent"
    android:layout_height="120dp"
    android:orientation="horizontal">

    <CheckBox
        android:id="@+id/cb_child"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="30dp"
        android:layout_marginLeft="20dp"
        android:layout_marginTop="45dp"
        android:focusable="false" />


    <com.facebook.drawee.view.SimpleDraweeView
        android:id="@+id/child_sdv"
        android:layout_width="100dp"
        android:layout_height="match_parent"
        android:layout_margin="8dp"
        app:placeholderImage="@mipmap/ic_launcher_round" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="20dp"
        android:orientation="vertical"
        android:padding="10dp">

        <TextView
            android:id="@+id/child_tit"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="123"
            android:textStyle="bold" />

        <TextView
            android:id="@+id/child_info"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="8dp"
            android:text="颜色:黑;尺寸:23L" />

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="30dp"
            android:orientation="horizontal">

            <TextView
                android:id="@+id/child_price"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="¥"
                android:textColor="@color/colorAccent" />

            <com.bwei.wsq.gouwu11.view.AddDeleteView
                android:id="@+id/adv_main"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentRight="true"
                android:layout_weight="1"
                app:left_text="-"
                app:middle_text="1"
                app:right_text="+" />
        </RelativeLayout>

    </LinearLayout>
</LinearLayout>


group:
<?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="100dp"
    android:orientation="horizontal">

    <CheckBox
        android:id="@+id/cb_group"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="30dp"
        android:layout_marginLeft="10dp"
        android:layout_marginTop="30dp"
        android:focusable="false" />

    <TextView
        android:id="@+id/gou_dian"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="20dp"
        android:layout_marginTop="30dp"
        android:text="标记" />
</LinearLayout>

  

bean
ProductDetailBean :
public class ProductDetailBean {

    /**
     * msg :
     * seller : {"description":"我是商家11","icon":"http://120.27.23.105/images/icon.png","name":"商家11","productNums":999,"score":5,"sellerid":11}
     * code : 0
     * data : {"bargainPrice":159,"createtime":"2017-10-14T21:49:15","detailUrl":"https://item.m.jd.com/product/5061723.html?utm_source=androidapp&utm_medium=appshare&utm_campaign=t_335139774&utm_term=QQfriends","images":"https://m.360buyimg.com/n0/jfs/t8716/197/1271594444/173291/2f40bb4f/59b743bcN8509428e.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t8347/264/1286771527/92188/5cf5ec04/59b7420fN65378e9e.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t7363/165/3000956253/190883/179a372/59b743bfNd0c79d93.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t7399/112/2935531768/183594/b77c7d4a/59b7441aNc3d40133.jpg!q70.jpg","itemtype":0,"pid":100,"price":2200,"pscid":112,"salenum":456,"sellerid":11,"subhead":"针织针织闪闪闪亮你的眼","title":"维迩旎 2017秋冬新款长袖针织连衣裙韩版气质中长款名媛包臀A字裙 zx179709 黑色 XL"}
     */

    private String msg;
    private SellerBean seller;
    private String code;
    private DataBean data;

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public SellerBean getSeller() {
        return seller;
    }

    public void setSeller(SellerBean seller) {
        this.seller = seller;
    }

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public DataBean getData() {
        return data;
    }

    public void setData(DataBean data) {
        this.data = data;
    }

    public static class SellerBean {
        /**
         * description : 我是商家11
         * icon : http://120.27.23.105/images/icon.png
         * name : 商家11
         * productNums : 999
         * score : 5
         * sellerid : 11
         */

        private String description;
        private String icon;
        private String name;
        private int productNums;
        private int score;
        private int sellerid;

        public String getDescription() {
            return description;
        }

        public void setDescription(String description) {
            this.description = description;
        }

        public String getIcon() {
            return icon;
        }

        public void setIcon(String icon) {
            this.icon = icon;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public int getProductNums() {
            return productNums;
        }

        public void setProductNums(int productNums) {
            this.productNums = productNums;
        }

        public int getScore() {
            return score;
        }

        public void setScore(int score) {
            this.score = score;
        }

        public int getSellerid() {
            return sellerid;
        }

        public void setSellerid(int sellerid) {
            this.sellerid = sellerid;
        }
    }

    public static class DataBean {
        /**
         * bargainPrice : 159
         * createtime : 2017-10-14T21:49:15
         * detailUrl : https://item.m.jd.com/product/5061723.html?utm_source=androidapp&utm_medium=appshare&utm_campaign=t_335139774&utm_term=QQfriends
         * images : https://m.360buyimg.com/n0/jfs/t8716/197/1271594444/173291/2f40bb4f/59b743bcN8509428e.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t8347/264/1286771527/92188/5cf5ec04/59b7420fN65378e9e.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t7363/165/3000956253/190883/179a372/59b743bfNd0c79d93.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t7399/112/2935531768/183594/b77c7d4a/59b7441aNc3d40133.jpg!q70.jpg
         * itemtype : 0
         * pid : 100
         * price : 2200
         * pscid : 112
         * salenum : 456
         * sellerid : 11
         * subhead : 针织针织闪闪闪亮你的眼
         * title : 维迩旎 2017秋冬新款长袖针织连衣裙韩版气质中长款名媛包臀A字裙 zx179709 黑色 XL
         */

        private int bargainPrice;
        private String createtime;
        private String detailUrl;
        private String images;
        private int itemtype;
        private int pid;
        private int price;
        private int pscid;
        private int salenum;
        private int sellerid;
        private String subhead;
        private String title;

        public int getBargainPrice() {
            return bargainPrice;
        }

        public void setBargainPrice(int 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 int getPrice() {
            return price;
        }

        public void setPrice(int 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;
        }
    }
}






AddCartBean :
public class AddCartBean {

    /**
     * msg : 加购成功
     * code : 0
     */

    private String msg;
    private String code;

    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;
    }
}




CartBean ======
public class CartBean {

    /**
     * msg : 请求成功
     * code : 0
     * data : [{"list":[{"bargainPrice":11800,"createtime":"2017-10-10T17:33:37","detailUrl":"https://item.m.jd.com/product/4338107.html?utm#_source=androidapp&utm#_medium=appshare&utm#_campaign=t#_335139774&utm#_term=QQfriends","images":"https://m.360buyimg.com/n0/jfs/t6700/155/2098998076/156185/6cf95035/595dd5a5Nc3a7dab5.jpg!q70.jpg","num":9,"pid":57,"price":5199,"pscid":40,"selected":0,"sellerid":1,"subhead":"【i5 MX150 2G显存】全高清窄边框 8G内存 256固态硬盘 支持指纹识别 预装WIN10系统","title":"小米(MI)Air 13.3英寸全金属轻薄笔记本(i5-7200U 8G 256G PCle SSD MX150 2G独显 FHD 指纹识别 Win10)银 "}],"sellerName":"商家1","sellerid":"1"},{"list":[{"bargainPrice":6666,"createtime":"2017-10-10T16:01:31","detailUrl":"https://item.m.jd.com/product/5089273.html?utm#_source=androidapp&utm#_medium=appshare&utm#_campaign=t#_335139774&utm#_term=QQfriends","images":"https://m.360buyimg.com/n0/jfs/t8284/363/1326459580/71585/6d3e8013/59b857f2N6ca75622.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t9346/182/1406837243/282106/68af5b54/59b8480aNe8af7f5c.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t8434/54/1359766007/56140/579509d9/59b85801Nfea207db.jpg!q70.jpg","num":1,"pid":46,"price":234,"pscid":39,"selected":0,"sellerid":2,"subhead":"【iPhone新品上市】新一代iPhone,让智能看起来更不一样","title":"Apple iPhone 8 Plus (A1864) 64GB 金色 移动联通电信4G手机"},{"bargainPrice":11800,"createtime":"2017-10-14T21:38:26","detailUrl":"https://item.m.jd.com/product/5025518.html?utm#_source=androidapp&utm#_medium=appshare&utm#_campaign=t#_335139774&utm#_term=QQfriends","images":"https://m.360buyimg.com/n0/jfs/t8830/106/1760940277/195595/5cf9412f/59bf2ef5N5ab7dc16.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5428/70/1520969931/274676/b644dd0d/591128e7Nd2f70da0.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5566/365/1519564203/36911/620c750c/591128eaN54ac3363.jpg!q70.jpg","num":9,"pid":58,"price":6399,"pscid":40,"selected":0,"sellerid":2,"subhead":"升级4G大显存!Nvme协议Pcie SSD,速度快人一步】GTX1050Ti就选拯救者!专业游戏键盘&新模具全新设计!","title":"联想(Lenovo)拯救者R720 15.6英寸游戏笔记本电脑(i5-7300HQ 8G 1T+128G SSD GTX1050Ti 4G IPS 黑)"}],"sellerName":"商家2","sellerid":"2"},{"list":[{"bargainPrice":1599,"createtime":"2017-10-14T21:48:08","detailUrl":"https://item.m.jd.com/product/1993026402.html?utm#_source=androidapp&utm#_medium=appshare&utm#_campaign=t#_335139774&utm#_term=QQfriends","images":"https://m.360buyimg.com/n0/jfs/t5863/302/8961270302/97126/41feade1/5981c81cNc1b1fbef.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t7003/250/1488538438/195825/53bf31ba/5981c57eN51e95176.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5665/100/8954482513/43454/418611a9/5981c57eNd5fc97ba.jpg!q70.jpg","num":2,"pid":47,"price":111,"pscid":39,"selected":0,"sellerid":3,"subhead":"碳黑色 32GB 全网通 官方标配 1件","title":"锤子 坚果Pro 特别版 巧克力色 酒红色 全网通 移动联通电信4G手机 双卡双待 碳黑色 32GB 全网通"},{"bargainPrice":5599,"createtime":"2017-10-10T17:30:32","detailUrl":"https://item.m.jd.com/product/4824715.html?utm#_source=androidapp&utm#_medium=appshare&utm#_campaign=t#_335139774&utm#_term=QQfriends","images":"https://m.360buyimg.com/n12/jfs/t7768/184/1153704394/148460/f42e1432/599a930fN8a85626b.jpg!q70.jpg","num":5,"pid":59,"price":5599,"pscid":40,"selected":0,"sellerid":3,"subhead":"游戏本选择4G独显,拒绝掉帧】升级版IPS全高清防眩光显示屏,WASD方向键颜色加持,三大出风口立体散热!","title":"戴尔DELL灵越游匣15PR-6648B GTX1050 15.6英寸游戏笔记本电脑(i5-7300HQ 8G 128GSSD+1T 4G独显 IPS)黑"}],"sellerName":"商家3","sellerid":"3"},{"list":[{"bargainPrice":11800,"createtime":"2017-10-14T21:48:08","detailUrl":"https://mitem.jd.hk/ware/view.action?wareId=1988853309&cachekey=1acb07a701ece8d2434a6ae7fa6870a1","images":"https://m.360buyimg.com/n0/jfs/t6130/97/1370670410/180682/1109582a/593276b1Nd81fe723.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5698/110/2617517836/202970/c9388feb/593276b7Nbd94ef1f.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5698/110/2617517836/202970/c9388feb/593276b7Nbd94ef1f.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5815/178/2614671118/51656/7f52d137/593276c7N107b725a.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5878/60/2557817477/30873/4502b606/593276caN5a7d6357.jpg!q70.jpg","num":2,"pid":60,"price":13888,"pscid":40,"selected":0,"sellerid":4,"subhead":"购买电脑办公部分商品满1元返火车票5元优惠券(返完即止)","title":"全球购 新款Apple MacBook Pro 苹果笔记本电脑 银色VP2新13英寸Bar i5/8G/256G"}],"sellerName":"商家4","sellerid":"4"},{"list":[{"bargainPrice":2999,"createtime":"2017-10-14T21:48:08","detailUrl":"https://item.m.jd.com/product/2385655.html?utm#_source=androidapp&utm#_medium=appshare&utm#_campaign=t#_335139774&utm#_term=QQfriends","images":"https://m.360buyimg.com/n0/jfs/t2068/298/2448145915/157953/7be197df/56d51a42Nd86f1c8e.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t2437/128/1687178395/117431/bcc190c1/56d3fcbaNb2963d21.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t2467/222/2263160610/95597/927b8a2f/56d3eafeNdecebeb6.jpg!q70.jpg","num":1,"pid":53,"price":777,"pscid":39,"selected":0,"sellerid":9,"subhead":"Super AMOLED三星双曲面2K 屏,支持无线充电!","title":"三星 Galaxy S7 edge(G9350)4GB+32GB 铂光金 移动联通电信4G手机 双卡双待"}],"sellerName":"商家9","sellerid":"9"},{"list":[{"bargainPrice":159,"createtime":"2017-10-14T21:49:15","detailUrl":"https://item.m.jd.com/product/5061723.html?utm_source=androidapp&utm_medium=appshare&utm_campaign=t_335139774&utm_term=QQfriends","images":"https://m.360buyimg.com/n0/jfs/t8716/197/1271594444/173291/2f40bb4f/59b743bcN8509428e.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t8347/264/1286771527/92188/5cf5ec04/59b7420fN65378e9e.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t7363/165/3000956253/190883/179a372/59b743bfNd0c79d93.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t7399/112/2935531768/183594/b77c7d4a/59b7441aNc3d40133.jpg!q70.jpg","num":1,"pid":100,"price":2200,"pscid":112,"selected":0,"sellerid":11,"subhead":"针织针织闪闪闪亮你的眼","title":"维迩旎 2017秋冬新款长袖针织连衣裙韩版气质中长款名媛包臀A字裙 zx179709 黑色 XL"}],"sellerName":"商家11","sellerid":"11"},{"list":[{"bargainPrice":11800,"createtime":"2017-10-03T23:53:28","detailUrl":"https://mitem.jd.hk/ware/view.action?wareId=1988853309&cachekey=1acb07a701ece8d2434a6ae7fa6870a1","images":"https://m.360buyimg.com/n0/jfs/t6130/97/1370670410/180682/1109582a/593276b1Nd81fe723.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5698/110/2617517836/202970/c9388feb/593276b7Nbd94ef1f.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5698/110/2617517836/202970/c9388feb/593276b7Nbd94ef1f.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5815/178/2614671118/51656/7f52d137/593276c7N107b725a.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5878/60/2557817477/30873/4502b606/593276caN5a7d6357.jpg!q70.jpg","num":1,"pid":71,"price":32999,"pscid":40,"selected":0,"sellerid":15,"subhead":"购买电脑办公部分商品满1元返火车票5元优惠券(返完即止)","title":"全球购 新款Apple MacBook Pro 苹果笔记本电脑 银色VP2新13英寸Bar i5/8G/256G"}],"sellerName":"商家15","sellerid":"15"}]
     */

    private String msg;
    private String code;
    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 List<DataBean> getData() {
        return data;
    }

    public void setData(List<DataBean> data) {
        this.data = data;
    }

    public static class DataBean {
        /**
         * list : [{"bargainPrice":11800,"createtime":"2017-10-10T17:33:37","detailUrl":"https://item.m.jd.com/product/4338107.html?utm#_source=androidapp&utm#_medium=appshare&utm#_campaign=t#_335139774&utm#_term=QQfriends","images":"https://m.360buyimg.com/n0/jfs/t6700/155/2098998076/156185/6cf95035/595dd5a5Nc3a7dab5.jpg!q70.jpg","num":9,"pid":57,"price":5199,"pscid":40,"selected":0,"sellerid":1,"subhead":"【i5 MX150 2G显存】全高清窄边框 8G内存 256固态硬盘 支持指纹识别 预装WIN10系统","title":"小米(MI)Air 13.3英寸全金属轻薄笔记本(i5-7200U 8G 256G PCle SSD MX150 2G独显 FHD 指纹识别 Win10)银 "}]
         * sellerName : 商家1
         * sellerid : 1
         */

        private boolean checked;
        private String sellerName;
        private String sellerid;
        private List<ListBean> list;

        public boolean isChecked() {
            return checked;
        }

        public void setChecked(boolean checked) {
            this.checked = checked;
        }

        public String getSellerName() {
            return sellerName;
        }

        public void setSellerName(String sellerName) {
            this.sellerName = sellerName;
        }

        public String getSellerid() {
            return sellerid;
        }

        public void setSellerid(String sellerid) {
            this.sellerid = sellerid;
        }

        public List<ListBean> getList() {
            return list;
        }

        public void setList(List<ListBean> list) {
            this.list = list;
        }

        public static class ListBean {
            /**
             * bargainPrice : 11800
             * createtime : 2017-10-10T17:33:37
             * detailUrl : https://item.m.jd.com/product/4338107.html?utm#_source=androidapp&utm#_medium=appshare&utm#_campaign=t#_335139774&utm#_term=QQfriends
             * images : https://m.360buyimg.com/n0/jfs/t6700/155/2098998076/156185/6cf95035/595dd5a5Nc3a7dab5.jpg!q70.jpg
             * num : 9
             * pid : 57
             * price : 5199
             * pscid : 40
             * selected : 0
             * sellerid : 1
             * subhead : 【i5 MX150 2G显存】全高清窄边框 8G内存 256固态硬盘 支持指纹识别 预装WIN10系统
             * title : 小米(MI)Air 13.3英寸全金属轻薄笔记本(i5-7200U 8G 256G PCle SSD MX150 2G独显 FHD 指纹识别 Win10)银
             */
            private boolean checked;
            private double bargainPrice;
            private String createtime;
            private String detailUrl;
            private String images;
            private int num;
            private int pid;
            private double price;
            private int pscid;
            private int selected;
            private int sellerid;
            private String subhead;
            private String title;

            public boolean isChecked() {
                return checked;
            }

            public void setChecked(boolean checked) {
                this.checked = checked;
            }

            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 getNum() {
                return num;
            }

            public void setNum(int num) {
                this.num = num;
            }

            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 getSelected() {
                return selected;
            }

            public void setSelected(int selected) {
                this.selected = selected;
            }

            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;
            }
        }
    }
}

  

posted @ 2018-01-10 14:12  小马哥(马云)  阅读(447)  评论(0编辑  收藏  举报