//依赖
compile 'io.reactivex.rxjava2:rxjava:2.0.7'
compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
compile 'com.squareup.retrofit2:retrofit:2.1.0'
compile 'com.squareup.retrofit2:adapter-rxjava2:2.2.0'
compile 'com.squareup.retrofit2:converter-gson:2.1.0'
compile 'com.squareup.retrofit2:converter-scalars:2.1.0'
compile 'com.jakewharton:butterknife:8.8.1'
compile 'com.android.support:recyclerview-v7:26.0.0-alpha1'
compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.5'
compile 'com.facebook.fresco:fresco:0.12.0'
compile 'com.github.bumptech.glide:glide:3.7.0'
compile 'org.greenrobot:eventbus:3.1.1'
compile 'com.android.support:design:26.0.0-alpha1'
compile 'com.dou361.ijkplayer:jjdxm-ijkplayer:1.0.5'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
//权限
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
public class MainActivity extends AppCompatActivity implements XQpresenter.IXiangQingView, AddCartPrestener.IAddCartView {@BindView(R.id.simpleDetails)SimpleDraweeView simpleDetails;
    @BindView(R.id.title)TextView title;
    @BindView(R.id.price)TextView price;
    @BindView(R.id.addCart)Button addCart;

    private PlayerView play;
    @BindView(R.id.lj)Button lj;
    private XQpresenter xQpresenter;
    private AddCartPrestener addCartPresenter;
    private String pid;

    @Override
    protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);
        pid = getIntent().getStringExtra("pid");
        xQpresenter = new XQpresenter(this);
        xQpresenter.getData("10");

        addCartPresenter = new AddCartPrestener(this);

        String url = "http://mirror.aarnet.edu.au/pub/TED-talks/911Mothers_2010W-480p.mp4";
        play = new PlayerView(this).setTitle("什么").setScaleType(PlayStateParams.fitparent).hideMenu(true).forbidTouch(false).setPlaySource(url);
        play.startPlay();
    }@Override
    public void success(XiangQingBean.DataBean list) {//设置数据
        String[] split = list.getImages().split("\\|");
        simpleDetails.setImageURI(Uri.parse(split[0]));
        title.setText(list.getTitle());
        price.setText(list.getPrice() + "");
    }@Override
    public void success(String s) {String ss = s;
        if (s.equals("加购成功")) {Toast.makeText(MainActivity.this, s, Toast.LENGTH_SHORT).show();
        } else {Toast.makeText(MainActivity.this, s, Toast.LENGTH_SHORT).show();
        }}@Override
    protected void onStop() {super.onStop();
        play.stopPlay();
    }//销毁
    @Override
    protected void onDestroy() {super.onDestroy();
        xQpresenter.detach();
    }@OnClick({R.id.addCart, R.id.lj})public void onClick(View v) {switch (v.getId()) {default:break;
            case R.id.addCart:addCartPresenter.getData("2");
                break;
            case R.id.lj:Intent intent = new Intent(MainActivity.this, ShopCartActivity.class);
                intent.putExtra("pid", 2);
                startActivity(intent);
                break;
        }}
}
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:layout_alignParentTop="true"
    android:orientation="vertical">

    <include
        layout="@layout/simple_player_view_player"
        android:layout_width="match_parent"
        android:layout_height="300dp" />

    <com.facebook.drawee.view.SimpleDraweeView
        android:id="@+id/simpleDetails"
        android:layout_width="match_parent"
        android:layout_height="200dp" />

    <TextView
        android:id="@+id/title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="标题"
        android:textSize="20sp" />

    <TextView
        android:id="@+id/price"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="5dp"
        android:text="价格"
        android:textColor="#FEB016"
        android:textSize="20sp" />
</LinearLayout>

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_alignParentRight="true"
    android:orientation="horizontal">

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:layout_weight="1"
        android:orientation="horizontal">

        <ImageView
            android:layout_width="0dp"
            android:layout_height="30dp"
            android:layout_weight="1"
            android:src="@mipmap/ic_launcher" />

        <ImageView
            android:layout_width="0dp"
            android:layout_height="30dp"
            android:layout_weight="1"
            android:src="@mipmap/ic_launcher" />

        <ImageView
            android:layout_width="0dp"
            android:layout_height="30dp"
            android:layout_weight="1"
            android:src="@mipmap/ic_launcher" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginLeft="25dp"
        android:layout_weight="1"
        android:orientation="horizontal">

        <Button
            android:id="@+id/addCart"
            android:layout_weight="1"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="#ff0"
            android:text="加入购物车"
            android:textColor="#fff" />

        <Button
            android:layout_weight="1"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="#f00"
            android:text="立即购买"
            android:id="@+id/lj"
            android:textColor="#fff" />
    </LinearLayout>

</LinearLayout>

public interface ApiService {@GET
    Observable<String> get(@Url String url, @QueryMap Map<String, String> map);

    @FormUrlEncoded
    @POST
    Observable<String> post(@Url String url, @FieldMap Map<String, String> map);
}
public abstract class BaseObserver<T> implements Observer<String> {@Override
    public void onSubscribe(Disposable d) {}@Override
    public void onNext(String s) {try {Type genType = getClass().getGenericSuperclass();
            Type[] params = ((ParameterizedType) genType).getActualTypeArguments();
            Class entityClass = (Class) params[0];
            Gson gson = new Gson();
            T t = (T) gson.fromJson(s, entityClass);
            success(t);

        } catch (Exception e) {failure(1001);
            e.printStackTrace();
        }}@Override
    public void onError(Throwable e) {try {if (e != null) {if (e instanceof HttpException) {failure(HTTP_ERROR);
                } else if (e instanceof SocketException) {failure(NET_WORK_ERROR);
                } else {failure(UNKNOW_ERROR);
                }} else {failure(UNKNOW_ERROR);
            }e.printStackTrace();
        } catch (Exception e1) {failure(UNKNOW_ERROR);
            e1.printStackTrace();
        }}@Override
    public void onComplete() {}/**
     * code
     * 1000 UNKNOW_ERROR 未知错误
     * 1001 json 转化异常  parse error
     * 1002 当前网络不可用     java.net.SocketException: Network is unreachable  超时
     * 1003 服务器不可用 401 402 403 500 502 503 504
     *
     * @param code
     */

    public static final int UNKNOW_ERROR = 1000;
    public static final int JSON_FORMAT_ERROR = 1001;
    public static final int NET_WORK_ERROR = 1002;
    public static final int HTTP_ERROR = 1003;

    public abstract void success(T t);

    public abstract void failure(int code);

}
public class CustomLinearLayout extends LinearLayout{private int i = 1;
    private EditText et;

    public CustomLinearLayout(Context context) {super(context);
    }public CustomLinearLayout(final Context context, @Nullable AttributeSet attrs) {super(context, attrs);
        View view = View.inflate(context, R.layout.custom_linearlayout,null);
        addView(view);
        Button jia = view.findViewById(R.id.jia);
        Button jian = view.findViewById(R.id.jian);
        et = view.findViewById(R.id.edit);
        et.setText("1");
        jia.setOnClickListener(new OnClickListener() {@Override
            public void onClick(View v) {i = Integer.parseInt(et.getText().toString().trim());
                i++;
                et.setText(i+"");
                if(countListener!=null){countListener.setCount(i);
                }}});

        jian.setOnClickListener(new OnClickListener() {@Override
            public void onClick(View v) {i = Integer.parseInt(et.getText().toString().trim());
                if(i>1){i--;
                }else{Toast.makeText(context,"数量不能小于1",Toast.LENGTH_SHORT).show();
                }et.setText(i+"");
                if(countListener!=null){countListener.setCount(i);
                }}});
    }public CustomLinearLayout(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);
    }CountListener countListener;
    public void getCount(CountListener countListener){this.countListener = countListener;
    }public interface CountListener{void setCount(int i);
    }public void setText(String count){et.setText(count);
    }}
public class RetrofitManager {public static OkHttpClient client = new OkHttpClient.Builder().build();

    public static  ApiService  apiService = new Retrofit.Builder().baseUrl("http://120.27.23.105/").addCallAdapterFactory(RxJava2CallAdapterFactory.create()).addConverterFactory(ScalarsConverterFactory.create()).client(client).build().create(ApiService.class);

    public static void get(String url, Map<String,String> map, Observer observer){apiService.get(url,map).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(observer);

    }public static void post(String url,Map<String,String> map,Observer observer){apiService.post(url,map).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(observer);
    }
}
public class XQmodel {public void getData(String pid, final IXiangQiangModel iXiangQiangModel){Map<String ,String > map=new HashMap<>();
        map.put("pid","10");
        map.put("source","android");
        RetrofitManager.get("product/getProductDetail",map, new BaseObserver<XiangQingBean>() {@Override
            public void success(XiangQingBean xiangQingBean) {if(iXiangQiangModel!=null){iXiangQiangModel.seccess(xiangQingBean);
                }}@Override
            public void failure(int code) {}});
    }public interface  IXiangQiangModel{void seccess(XiangQingBean xiangQingBean);
    }
}
public class XQpresenter {IXiangQingView iXiangQingView;
    XQmodel xQmodel;

    public XQpresenter(IXiangQingView iXiangQingView) {this.iXiangQingView = iXiangQingView;
        xQmodel = new XQmodel();
    }public void getData(String pid) {xQmodel.getData(pid, new XQmodel.IXiangQiangModel() {@Override
            public void seccess(XiangQingBean xiangQingBean) {iXiangQingView.success(xiangQingBean.getData());
            }});
    }public interface IXiangQingView {void success(XiangQingBean.DataBean list);
    }//防止内存泄漏
    public void detach() {iXiangQingView = null;
    }
}
public class AddCartModel {//添加购物车
    public void getData(String pid, final IAddcartModel iAddcartModel){Map<String, String> map = new HashMap<>();
        map.put("pid",pid);
        map.put("source","android");
        RetrofitManager.get("product/addCart?uid=11738",map, new BaseObserver<AddCartBean>() {@Override
            public void success(AddCartBean addCartBean) {if(iAddcartModel!=null){iAddcartModel.success(addCartBean);
                }}@Override
            public void failure(int code) {}});
    }public interface IAddcartModel{void success(AddCartBean addCartBean);
    }
}
public class AddCartPrestener {IAddCartView iAddCartView;
    AddCartModel addCartModel;

    public AddCartPrestener(IAddCartView iAddCartView) {this.iAddCartView = iAddCartView;
        addCartModel = new AddCartModel();
    }public void getData(String pid) {addCartModel.getData(pid, new AddCartModel.IAddcartModel() {@Override
            public void success(AddCartBean addCartBean) {if (iAddCartView != null) {iAddCartView.success(addCartBean.getMsg());
                }}});
    }
public class ShopCartModel {//购物车的数据
    public void getData(final IShopCart iShopCart) {Map<String, String> map = new HashMap<>();
        map.put("uid", "11738");
        map.put("source", "android");

        RetrofitManager.get("product/getCarts", map, new BaseObserver<CartBean>() {@Override
            public void success(CartBean cartBean) {if(iShopCart!=null){iShopCart.success(cartBean);
                }}@Override
            public void failure(int code) {}});
    }public interface IShopCart {void success(CartBean cartBean);
    }
}
    public interface IAddCartView {        void success(String s);    }}
public class ShopCartPrestener {ShopCartModel cartModel;
    ICartView iCartView;

    public ShopCartPrestener(ICartView iCartView) {this.iCartView = iCartView;
        cartModel = new ShopCartModel();
    }public void getData() {cartModel.getData(new ShopCartModel.IShopCart() {@Override
            public void success(CartBean cartBean) {//拿到一级二级数据
                List<CartBean.DataBean> group = cartBean.getData();
                List<List<CartBean.DataBean.ListBean>> child = new ArrayList<>();
                for (int i = 0; i < group.size(); i++) {child.add(group.get(i).getList());
                }if (iCartView != null) {iCartView.success(group, child);
                }}});
    }public interface ICartView {void success(List<CartBean.DataBean> group, List<List<CartBean.DataBean.ListBean>> child);
    }}

public class ShopCartActivity extends AppCompatActivity implements ShopCartPrestener.ICartView {@BindView(R.id.bianji)TextView bianji;
    @BindView(R.id.linear2)RelativeLayout linear2;
    @BindView(R.id.expandView)ExpandableListView expandView;
    @BindView(R.id.checkAll)CheckBox checkAll;
    @BindView(R.id.zprice)TextView zprice;
    @BindView(R.id.zcount)Button zcount;
    @BindView(R.id.linear)RelativeLayout mLinear;
    private ShopCartPrestener shopCartPrestener;
    private ElvAdapter elvAdapter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_shop_cart);
        ButterKnife.bind(this);
        shopCartPrestener = new ShopCartPrestener(this);
        shopCartPrestener.getData();
    }@OnClick({R.id.checkAll, R.id.zcount})public void onViewClicked(View view) {switch (view.getId()) {case R.id.checkAll:elvAdapter.checkedAll(checkAll.isChecked());
                break;
            case R.id.zcount:break;
        }}@Override
    public void success(List<CartBean.DataBean> group, List<List<CartBean.DataBean.ListBean>> child) {elvAdapter = new ElvAdapter(ShopCartActivity.this, group, child);
        elvAdapter.setChangeListener(new ElvAdapter.ChangeListener() {@Override
            public void setState(boolean flag) {checkAll.setChecked(flag);
            }@Override
            public void setText(String price, String count) {zcount.setText("结算(" + count + ")");
                zprice.setText("总计:" + price + "¥");
            }});
        expandView.setAdapter(elvAdapter);
        //默认展开
        for (int i = 0; i < group.size(); i++) {expandView.expandGroup(i);
        }}
}
<RelativeLayout
    android:id="@+id/linear2"
    android:layout_width="match_parent"
    android:layout_height="60dp"
    android:background="#000">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:text="购物车"
        android:textColor="#fff"
        android:textSize="20sp" />

    <TextView
        android:id="@+id/bianji"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentRight="true"
        android:layout_marginBottom="10dp"
        android:layout_marginRight="10dp"
        android:text="编辑"
        android:textColor="#fff" />

</RelativeLayout>

<ExpandableListView
    android:id="@+id/expandView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_above="@+id/linear"
    android:layout_below="@+id/linear2"
    android:groupIndicator="@null"></ExpandableListView>

<RelativeLayout
    android:id="@+id/linear"
    android:layout_width="match_parent"
    android:layout_height="70dp"
    android:layout_alignParentBottom="true"
    android:background="#AAAAAA">

    <CheckBox
        android:id="@+id/checkAll"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:text="全选" />

    <TextView
        android:id="@+id/zprice"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:text="总计:0.0¥" />

    <Button
        android:id="@+id/zcount"
        android:layout_width="100dp"
        android:layout_height="match_parent"
        android:layout_alignParentRight="true"
        android:layout_centerVertical="true"
        android:background="#FF0000"
        android:text="结算(0)"
        android:textColor="#fff" />
</RelativeLayout>


public class CartBean {/**
     * msg : 请求成功
     * code : 0
     * data : [{"list":[{"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","num":2,"pid":1,"price":118,"pscid":1,"selected":0,"sellerid":17,"subhead":"每个中秋都不能简单,无论身在何处,你总需要一块饼让生活更圆满,京东月饼让爱更圆满京东自营,闪电配送,更多惊喜,快用手指戳一下","title":"北京稻香村 稻香村中秋节月饼 老北京月饼礼盒655g"}],"sellerName":"商家17","sellerid":"17"}]
     */

    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":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","num":2,"pid":1,"price":118,"pscid":1,"selected":0,"sellerid":17,"subhead":"每个中秋都不能简单,无论身在何处,你总需要一块饼让生活更圆满,京东月饼让爱更圆满京东自营,闪电配送,更多惊喜,快用手指戳一下","title":"北京稻香村 稻香村中秋节月饼 老北京月饼礼盒655g"}]
         * sellerName : 商家17
         * sellerid : 17
         */

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

        public boolean isgChecked() {return gChecked;
        }public void setgChecked(boolean gChecked) {this.gChecked = gChecked;
        }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 : 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
             * num : 2
             * pid : 1
             * price : 118.0
             * pscid : 1
             * selected : 0
             * sellerid : 17
             * subhead : 每个中秋都不能简单,无论身在何处,你总需要一块饼让生活更圆满,京东月饼让爱更圆满京东自营,闪电配送,更多惊喜,快用手指戳一下
             * title : 北京稻香村 稻香村中秋节月饼 老北京月饼礼盒655g
             */

            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;
            private boolean cChecked;

            public boolean iscChecked() {return cChecked;
            }public void setcChecked(boolean cChecked) {this.cChecked = cChecked;
            }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;
            }}}
}
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;
    }
}
public class ElvAdapter extends BaseExpandableListAdapter {Context context;
    List<CartBean.DataBean> group;
    List<List<CartBean.DataBean.ListBean>> child;
    private Holder1 holder1;
    private Holder2 holder2;

    public ElvAdapter(Context context, List<CartBean.DataBean> group, List<List<CartBean.DataBean.ListBean>> child) {this.context = context;
        this.group = group;
        this.child = child;
    }@Override
    public int getGroupCount() {return group.size();
    }@Override
    public int getChildrenCount(int groupPosition) {return child.get(groupPosition).size();
    }@Override
    public Object getGroup(int groupPosition) {return group.get(groupPosition);
    }@Override
    public Object getChild(int groupPosition, int childPosition) {return child.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) {if (convertView == null) {convertView = LayoutInflater.from(context).inflate(R.layout.item_expandable_listview, null);
            holder1 = new Holder1();
            holder1.checkBox = convertView.findViewById(R.id.groupChecked);
            holder1.textview = convertView.findViewById(R.id.groupTitle);
            convertView.setTag(holder1);
        } else {holder1 = (Holder1) convertView.getTag();
        }//设置显示数据
        holder1.textview.setText(group.get(groupPosition).getSellerName());
        holder1.checkBox.setChecked(group.get(groupPosition).isgChecked());

        //设置一级标题的点击事件
        holder1.checkBox.setOnClickListener(new View.OnClickListener() {@Override
            public void onClick(View v) {boolean b = !group.get(groupPosition).isgChecked();
                Toast.makeText(context, b + "", Toast.LENGTH_SHORT).show();
                group.get(groupPosition).setgChecked(b);
                //拿到你点击孩子的父亲
                List<CartBean.DataBean.ListBean> listBeans = child.get(groupPosition);
                //遍历看看他有几个孩子
                for (int i = 0; i < listBeans.size(); i++) {listBeans.get(i).setcChecked(group.get(groupPosition).isgChecked());
                }changeListener.setState(isGroup());

                notifyDataSetChanged();
                sum();
            }});

        return convertView;
    }@Override
    public View getChildView(final int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {if (convertView == null) {convertView = LayoutInflater.from(context).inflate(R.layout.item_listview, null);
            holder2 = new Holder2();
            holder2.imageView = convertView.findViewById(R.id.simpleDraw);
            holder2.checkBox = convertView.findViewById(R.id.childChecked);
            holder2.title = convertView.findViewById(R.id.childTitle);
            holder2.miaoshu = convertView.findViewById(R.id.miaoShu);
            holder2.price = convertView.findViewById(R.id.childPrice);
            holder2.yprice = convertView.findViewById(R.id.childPriceY);
            holder2.linearLayout = convertView.findViewById(R.id.linearLayoutItem);
            holder2.customLinearLayout = convertView.findViewById(R.id.customLinearLayout);
            holder2.bt2 = convertView.findViewById(R.id.bt_del);

            convertView.setTag(holder2);
        } else {holder2 = (Holder2) convertView.getTag();
        }final CartBean.DataBean.ListBean listBean = child.get(groupPosition).get(childPosition);
        //设置显示数据
        holder2.checkBox.setChecked(listBean.iscChecked());
        holder2.title.setText(listBean.getTitle());
        holder2.price.setText("¥" + listBean.getPrice());
        holder2.yprice.setText("¥" + listBean.getBargainPrice());
        holder2.customLinearLayout.setText(listBean.getNum() + "");
        //中划线
        holder2.yprice.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG);
        // 设置中划线并加清晰
        holder2.yprice.setPaintFlags(Paint.STRIKE_THRU_TEXT_FLAG | Paint.ANTI_ALIAS_FLAG);
        holder2.miaoshu.setText(listBean.getSubhead());
        String[] split = listBean.getImages().split("\\|");
        Glide.with(context).load(split[0]).into(holder2.imageView);
        holder2.checkBox.setOnClickListener(new View.OnClickListener() {@Override
            public void onClick(View v) {List<CartBean.DataBean.ListBean> listBeans = child.get(groupPosition);
                boolean b = !listBeans.get(childPosition).iscChecked();
                listBeans.get(childPosition).setcChecked(b);
                boolean isno = isChildChange(listBeans);
                //设置一级的状态
                group.get(groupPosition).setgChecked(isno);

                changeListener.setState(isChild());

                notifyDataSetChanged();
                sum();
            }});
        //加减号的点击事件
        holder2.customLinearLayout.getCount(new CustomLinearLayout.CountListener() {@Override
            public void setCount(int i) {listBean.setNum(i);
                sum();
            }});
        holder2.bt2.setOnClickListener(new View.OnClickListener() {@Override
            public void onClick(View view) {//其实就是删除集合
                List<CartBean.DataBean.ListBean> listBeans = child.get(groupPosition);
                if (listBeans.size() > 0) {listBeans.remove(childPosition);
                }if (listBeans.size() == 0) {child.remove(groupPosition);
                    group.remove(groupPosition);
                }//刷新列表
                notifyDataSetChanged();
            }});

        return convertView;
    }//计算的方法
    public void sum() {double price = 0;
        int count = 0;

        for (int i = 0; i < group.size(); i++) {List<CartBean.DataBean.ListBean> list = group.get(i).getList();
            for (int j = 0; j < list.size(); j++) {if (list.get(j).iscChecked()) {price += list.get(j).getPrice() * list.get(j).getNum();
                    count += list.get(j).getNum();
                }}}notifyDataSetChanged();
        //接口回调
        if (changeListener != null) {changeListener.setText(price + "", count + "");
        }}ChangeListener changeListener;

    public void setChangeListener(ChangeListener changeListener) {this.changeListener = changeListener;
    }//接口传值,去改变全选的状态,设置商品的数量价格
    public interface ChangeListener {void setState(boolean flag);

        void setText(String price, String count);
    }//子类点击改变全选状态
    public boolean isChild() {for (int i = 0; i < group.size(); i++) {List<CartBean.DataBean.ListBean> list = group.get(i).getList();
            for (int j = 0; j < list.size(); j++) {if (!child.get(i).get(j).iscChecked()) {return false;
                }}}return true;
    }//父类点击改变全选的状态

    public boolean isGroup() {for (int i = 0; i < group.size(); i++) {if (!group.get(i).isgChecked()) {return false;
            }}return true;
    }//设置全选
    public void checkedAll(boolean flag) {if (flag) {for (int i = 0; i < group.size(); i++) {List<CartBean.DataBean.ListBean> list = group.get(i).getList();
                group.get(i).setgChecked(true);
                for (int j = 0; j < list.size(); j++) {child.get(i).get(j).setcChecked(true);
                }}} else {for (int i = 0; i < group.size(); i++) {List<CartBean.DataBean.ListBean> list = group.get(i).getList();
                group.get(i).setgChecked(false);
                for (int j = 0; j < list.size(); j++) {child.get(i).get(j).setcChecked(false);
                }}}notifyDataSetChanged();
        sum();
    }//如果有意子类没选中就将父类的状态改为true
    public boolean isChildChange(List<CartBean.DataBean.ListBean> listBeans) {for (int i = 0; i < listBeans.size(); i++) {if (!listBeans.get(i).iscChecked()) {return false;
            }}return true;
    }@Override
    public boolean isChildSelectable(int groupPosition, int childPosition) {return true;
    }class Holder1 {CheckBox checkBox;
        TextView textview;
    }class Holder2 {LinearLayout linearLayout;
        CustomLinearLayout customLinearLayout;
        CheckBox checkBox;
        ImageView imageView;
        TextView title;
        TextView miaoshu;
        TextView price;
        TextView yprice;
        Button bt2;
    }
}
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:orientation="horizontal"
        android:layout_height="match_parent">
        <Button
            android:layout_width="35dp"
            android:layout_height="35dp"
            android:text="-"
            android:id="@+id/jian"
            />
        <EditText
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/edit"
            />
        <Button
            android:text="+"
            android:id="@+id/jia"
            android:layout_width="35dp"
            android:layout_height="35dp" />
    </LinearLayout>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <CheckBox
        android:id="@+id/groupChecked"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        />
    <TextView
        android:id="@+id/groupTitle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="标题"
        />
</LinearLayout>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:fresco="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:orientation="horizontal"
    android:id="@+id/linearLayoutItem"
    android:gravity="center_vertical"
    android:layout_height="match_parent">

    <CheckBox
        android:layout_marginLeft="20dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/childChecked"
        />
    <ImageView

        android:layout_marginLeft="5dp"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:id="@+id/simpleDraw"
        />

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

        <TextView
            android:id="@+id/childTitle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="标题"
            android:textSize="16sp"
            android:textStyle="bold" />

        <TextView
            android:id="@+id/miaoShu"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:paddingBottom="20dp"
            android:paddingTop="20dp"
            android:text="描述" />

        <Button
            android:id="@+id/bt_del"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="20dp"
            android:text="删除" />

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center_vertical"
            android:orientation="horizontal">

            <TextView
                android:id="@+id/childPrice"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="价格"
                android:textColor="#FCB950"
                android:textSize="16sp" />

            <TextView
                android:id="@+id/childPriceY"
                android:layout_width="0dp"

                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="优惠" />

            <com.bwie.lyk_week03.net.CustomLinearLayout
                android:id="@+id/customLinearLayout"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content">

            </com.bwie.lyk_week03.net.CustomLinearLayout>
        </LinearLayout>

    </LinearLayout>

</LinearLayout>
public class XiangQingBean {/**
     * msg :
     * seller : {"description":"我是商家3","icon":"http://120.27.23.105/images/icon.png","name":"商家3","productNums":999,"score":5,"sellerid":3}
     * code : 0
     * data : {"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":10,"price":555.55,"pscid":1,"salenum":0,"sellerid":3,"subhead":"每个中秋都不能简单,无论身在何处,你总需要一块饼让生活更圆满,京东月饼让爱更圆满京东自营,闪电配送,更多惊喜,快用手指戳一下","title":"北京稻香村 稻香村中秋节月饼 老北京月饼礼盒655g"}
     */

    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 : 我是商家3
         * icon : http://120.27.23.105/images/icon.png
         * name : 商家3
         * productNums : 999
         * score : 5
         * sellerid : 3
         */

        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 : 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 : 10
         * price : 555.55
         * pscid : 1
         * salenum : 0
         * sellerid : 3
         * 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;

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

视频播放+详情页+购物车相关推荐

  1. vue+element模仿腾讯视频电影网站(二),增加视频播放详情页

    一.前言 1. 本项目在线预览:点击访问 2. 作者其他博客成品汇总预览:点击访问 3. 接上一篇:<vue+element模仿腾讯视频电影网站> 暂时源码并没有提供其他获取渠道,私聊作者 ...

  2. uniapp商品详情页规格、SKU选择

    uniapp商品详情页购物车选择 提示:这里因为后台返回的数据格式原因,代码性能可能有点稍差,但是注释是很完整的 文章目录 uniapp商品详情页购物车选择 先上代码,以示诚意 后台接口返回的数据格式 ...

  3. 微信小程序商城开发-商品详情页跳转购物车

    项目场景: 微信小程序商城开发中商品详情页中购物车页面的跳转(仅限于tabbar页面的跳转) 问题描述 点击商品详情页中的购物车图标跳转不到tabbar及导航栏中的购物车页面,总是报错 原因分析: 微 ...

  4. 小米商城官网(登录页,首页,详情页,我的购物车页,我的订单页,确认订单页)HTML+CSS+JS

    文章目录 前言 一.登录页 二.首页 三.我的购物车页 四.我的订单页 五.确认订单页 六.详情页 七.整体结构和效果图 总结 前言 仿小米商城官网项目是本人实训内容,实训老师带着做的首页和登录页,本 ...

  5. SpringBoot--网上商城项目(自定义的参数解析器、购物车后台前台功能、商品详情页)

    目录 一.自定义的参数解析器 关于Mybatis-plus时间字段代码生成问题 报错信息:Caused by: java.lang.IllegalStateException: No typehand ...

  6. Uni-app 课程详情页 获取课程详情 + 收藏 + 加入购物车

    class-detail.vue > <template><view class="class-detail"><!-- 导航 -->&l ...

  7. 仿写小米官网(登录、注册页面、首页、详情页、购物车)

    功能介绍 各网页公用功能 返回顶部 调用jquery的方法实现效果,页面滚动超过任意位置时右侧出现返回顶部按钮,点击后平滑返回顶部 注册 用户需要填写手机号.昵称.密码且勾选同意协议,如果是合法数据且 ...

  8. 微服务项目实战技术点汇总:“尚硅谷的谷粒在线教育”九、整合阿里云视频播放器、课程评论功能、讲师详情页、课程详情页、检索功能、课程和讲师列表功能

    文章目录 一.讲师 1.分页查询接口(后端) 1.controller 2.service 3.测试 2.分页显示讲师(前端) 3.讲师详情页(后端) 1.controller 2.测试 4.讲师详情 ...

  9. 渲染页到详情页到加入购物车

    1.渲染 拿到数据放在自己的data渲染 data(){ headerList: [] } :class="tabid == index ? 'active' : ''" //ta ...

最新文章

  1. Oracle单机版开机自启动
  2. Ajax的用法之JQuery
  3. php-fmp开机启动,php-fpm设置成服务并开机自动启动
  4. DL之DeepLabv1:DeepLabv1算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略
  5. [javaweb] servlet-session 会话跟踪技术 与 session保存作用域 (三)
  6. Zookeeper 服务注册中心
  7. 极客马拉松JUNCTION✖️TIANJIN
  8. 告别DNS劫持,一文读懂DoH
  9. Dart基础-变量与类型
  10. python必备入门代码-学习Python必备的八大知识板块,学好这些你就算入门啦~
  11. 3.5 Zend_Db_Table_Rowset
  12. 更换app图标和名称
  13. 新阁上位机开发---数据库系统之sa账户登录失败
  14. 卡口和电子警察的区别
  15. phpmywind 手机站多语言版本
  16. AndroidStudio蓝牙通信
  17. 29 | “懒惰”应该是所有程序员的骄傲
  18. 微信红包随机数字_微信随机红包数详解和算法代码
  19. h5app 实现ios更新跳转appStore
  20. RW、RO、ZI段的含义

热门文章

  1. PAT题解——Basic Level——1015 德才论
  2. IT小白如何从职场新人到行业翘楚,看一个IT高管的发展路线
  3. 写给刚毕业的弟、妹们
  4. 基于GMap.NET地图下载器的开发和研究
  5. java软件开发培训班靠谱吗?好找工作吗?
  6. text-align: justify;text-align-last: justify;实现两端对齐
  7. 普林斯顿大学计算机科学排名,普林斯顿大学计算机科学与工程世界排名2019年最新排名第9(ARWU世界排名)...
  8. c语言除法取两位小数点,高精度除法小数点位数
  9. 趣丸集团招股书“失效”,旗下TT语音已下架,如何实现稳定增长?
  10. tinymce 字体样式_谷歌字体和TinyMCE