购物车

自定义加减器

/**
 * date:2018/11/20
 * author:QMY(QMY)
 * function:
 */
public class AddRemoveView extends LinearLayout implements View.OnClickListener{
    TextView add_tv,sub_tv,product_number;
    int number=1;
    public AddRemoveView(Context context) {
        this(context,null);
    }

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

    public AddRemoveView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        //加载布局
        View view = View.inflate(context, R.layout.add_remove, this);
        //初始化控件
        initView();


    }

    private void initView() {

        add_tv = findViewById(R.id.add);
        sub_tv = findViewById(R.id.sub);
        product_number = findViewById(R.id.product_number);


        add_tv.setOnClickListener(this);
        sub_tv.setOnClickListener(this);

    }

    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.add:
                number++;
                product_number.setText(number+"");
                //回调
                mNumber.Numbers(number);
                break;
            case R.id.sub:
                if (number>1){
                    number--;
                    product_number.setText(number+"");
                    //回调
                    mNumber.Numbers(number);
                }
                break;
        }
    }

    public int getNumber() {
        return number;
    }

    public void setNumber(int number) {
        this.number = number;
        product_number.setText(number+"");
    }

    //接口
    public interface Number{
        void Numbers(int number);
    }

    public Number mNumber;

    public void  NumberChanged(Number number){
        mNumber = number;
    }

}

add_remove布局(加减器)

<LinearLayout
    android:gravity="center_vertical"
    android:background="#99000000"
    android:layout_gravity="center_vertical"
    android:layout_height="40dp"
    android:layout_width="100dp"
    android:layout_marginLeft="10dp"
    android:padding="2dp"
    xmlns:android="http://schemas.android.com/apk/res/android">
    <TextView
        android:id="@+id/sub"
        android:gravity="center"
        android:background="#ffffff"
        android:layout_height="match_parent"
        android:layout_width="0dp"
        android:textSize="16sp"
        android:text="-"
        android:layout_weight="1"/>
    <TextView
        android:id="@+id/product_number"
        android:gravity="center"
        android:background="#ffffff"
        android:layout_height="match_parent"
        android:layout_width="0dp"
        android:layout_marginLeft="2dp"
        android:text="1"
        android:layout_weight="1"/>
    <TextView android:id="@+id/add"
        android:gravity="center"
        android:background="#ffffff"
        android:layout_height="match_parent"
        android:layout_width="0dp"
        android:layout_marginLeft="2dp"
        android:textSize="16sp"
        android:text="+"
        android:layout_weight="1"/>
</LinearLayout>

购物车界面 mainactivity

public class MainActivity extends AppCompatActivity implements View.OnClickListener, IphonePresenter.IphoneData, Madapter.ShopCart {

    private ExpandableListView expandlistview;
    private CheckBox allcheck;
    private TextView allprice;
    private Button pay;
    Madapter madapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();

        //适配器
         madapter = new Madapter(MainActivity.this);
        expandlistview.setAdapter(madapter);
        //数据  p层
        IphonePresenter iphonePresenter = new IphonePresenter(this);
        iphonePresenter.requestData();

         //接口
         madapter.setShopCart(this);
    }


    private void initView() {
        expandlistview =  findViewById(R.id.expandlistview);
        allcheck =  findViewById(R.id.allcheck);
        allprice =  findViewById(R.id.allprice);
        pay = findViewById(R.id.pay);

        pay.setOnClickListener(this);
        allcheck.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.pay:

                break;
            case R.id.allcheck:  //全选按钮
                //判断是否所有商品全被选中
                boolean allSeled = madapter.isAllSeled();
                //点击全选
                madapter.onAllChecked(!allSeled);
                madapter.notifyDataSetChanged();
                refreshAll();
                break;
        }
    }

    @Override
    public void datasuccess(List<Iphone.DataBean> dataBeans) {
        madapter.setData(dataBeans);
        //展开列表
        for (int i=0;i<dataBeans.size();i++){
            expandlistview.expandGroup(i);
        }
    }

    //刷新checkbox状态和总价和总数量
    private void refreshAll() {
        //去判断是否所有得商品都被选中
        boolean allSeled = madapter.isAllSeled();
        //设置给全选checkBox
        allcheck.setChecked(allSeled);

        //计算总价
         float totalPrice = madapter.totalPrice();
         allprice.setText("总价:"+totalPrice);

        //计算总数量
        int producttotalNumber = madapter.ProducttotalNumber();
        pay.setText("去结算("+producttotalNumber+")");
    }


    // /点击组条目的复选框时
    @Override
    public void selectGroup(int groupPosition) {
        //首先判断子元素是否全被选中
        boolean sellerChildItemSeled = madapter.isSellerChildItemSeled(groupPosition);
        //商家被点击时  (全选或全不选)
        madapter.SellerSeled(groupPosition,!sellerChildItemSeled);
        //更新
        madapter.notifyDataSetChanged();

        refreshAll();
    }

    //点击子条目的checkbox
    @Override
    public void secectChild(int groupPosition, int childPosition) {
      madapter.childSeled(groupPosition,childPosition);
      madapter.notifyDataSetChanged();
        refreshAll();
    }

    //点击加减器时
    @Override
    public void numberchanged(int groupPosition, int childPosition, int number) {
       madapter.NumberChanged(groupPosition,childPosition,number);
       madapter.notifyDataSetChanged();

        refreshAll();
    }
}

p层

/**
 * date:2018/11/20
 * author:QMY(QMY)
 * function:
 */
public class IphonePresenter {
    public void requestData(){
        String path =  "http://www.zhaoapi.cn/product/getCarts?uid=71";
        //获取数据
        OkHttpUtils.getInstance().doGet(path, new OkHttpUtils.Utils() {
            @Override
            public void failed() {

            }
            @Override
            public void success(String string) {
                //解析
                Iphone iphone = new Gson().fromJson(string, Iphone.class);
                mIphoneData.datasuccess(iphone.getData());

            }
        });
    }

    //接口

    public interface IphoneData{
        void datasuccess(List<Iphone.DataBean> dataBeans);
    }
    public IphoneData mIphoneData;

    public IphonePresenter(IphoneData iphoneData) {
        mIphoneData = iphoneData;
    }
}

适配器

/**
 * date:2018/11/20
 * author:QMY(QMY)
 * function:
 */
public class Madapter extends BaseExpandableListAdapter {
    private final MainActivity mainActivity;
    private final List<Iphone.DataBean> list;

    public Madapter(MainActivity mainActivity) {
        this.mainActivity=mainActivity;
        list = new ArrayList<>();
    }

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

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



    @Override
    public View getGroupView(final int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
        GroupViewHolder gvh;
        if (convertView==null){
            gvh = new GroupViewHolder();
            convertView = View.inflate(mainActivity,R.layout.group,null);
            gvh.tv = convertView.findViewById(R.id.tv);
            gvh.group_check = convertView.findViewById(R.id.group_check);
            convertView.setTag(gvh);
        }else {
            gvh  = (GroupViewHolder) convertView.getTag();
        }
        gvh.tv.setText(list.get(groupPosition).getSellerName());

        根据当前商家的所有商品,确定该商家的checkbox是否被选中
        boolean sellerChildItemSeled = isSellerChildItemSeled(groupPosition);
        //更新
        gvh.group_check.setChecked(sellerChildItemSeled);

        //点击商家复选框
        gvh.group_check.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mShopCart.selectGroup(groupPosition);
            }
        });
        return convertView;
    }

    @Override
    public View getChildView(final int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
       ChildViewHolder cvh;
        if (convertView==null){
            cvh = new ChildViewHolder();
            convertView = View.inflate(mainActivity,R.layout.child,null);
            cvh.title = convertView.findViewById(R.id.title);
            cvh.price = convertView.findViewById(R.id.price);
            cvh.image = convertView.findViewById(R.id.image);
            cvh.child_check = convertView.findViewById(R.id.child_check);
            cvh.addremove = convertView.findViewById(R.id.add_remove_view);
            convertView.setTag(cvh);
        }else {
            cvh  = (ChildViewHolder) convertView.getTag();
        }
        cvh.title.setText(list.get(groupPosition).getList().get(childPosition).getTitle());
        cvh.price.setText(list.get(groupPosition).getList().get(childPosition).getPrice()+"");

        //分离
        String images = list.get(groupPosition).getList().get(childPosition).getImages();
        String[] split = images.split("\\|");
        ImageLoader.getInstance().displayImage(split[0],
                cvh.image,ImageLoderConfigs.getimageoption(mainActivity));

        //设置复选框是否选中
        cvh.child_check.setChecked(list.get(groupPosition).getList().get(childPosition).getSelected()==1);

        //设置组合式自定义控件内部的数量
        cvh.addremove.setNumber(list.get(groupPosition).getList().get(childPosition).getNum());



        //点击子条目
        cvh.child_check.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mShopCart.secectChild(groupPosition,childPosition);
            }
        });

        //加减器
        cvh.addremove.NumberChanged(new AddRemoveView.Number() {
            @Override
            public void Numbers(int number) {
                mShopCart.numberchanged(groupPosition,childPosition,number);
            }
        });
        return convertView;

    }

    点击商家条目时
        //判断商家的子条目是否全被选中
        public boolean isSellerChildItemSeled(int groupPosition){

            //拿到商家所有的商品
            List<Iphone.DataBean.ListBean> listBeans = list.get(groupPosition).getList();
            //Bean类中有一个selected来判断是否选中,未选中是0
            for (Iphone.DataBean.ListBean listBean : listBeans) {
                //只要有一个未选中,商家就直接未选中
                if (listBean.getSelected()==0) {
                    return false;
                }
            }
            return true;
    }

    //当商家得checkbox被点击得时候调用,(全选或全不选)
    public void SellerSeled(int groupPosition,boolean isSelected){
         //获取子元素
        List<Iphone.DataBean.ListBean> listBeans = list.get(groupPosition).getList();
        for (int i = 0; i<listBeans.size(); i++) {

            Iphone.DataBean.ListBean listBean = listBeans.get(i);

            listBean.setSelected(isSelected ? 1 : 0);
        }

    }

    /点击子条目时
    //当点击子条目的checkbox
    public void  childSeled(int groupPosition,int childPosition){
        //获取子条目
        Iphone.DataBean.ListBean listBean = list.get(groupPosition).getList().get(childPosition);

        listBean.setSelected(listBean.getSelected()==0 ? 1 : 0);
    }

    ///全选按钮时
    //判断所有商品是否被选中
    public boolean isAllSeled(){
        //遍历商家条目
        for (int i=0;i<list.size();i++){
            List<Iphone.DataBean.ListBean> listBeans = this.list.get(i).getList();
            //遍历子条目
            for (int j=0;j<listBeans.size();j++){
                if (listBeans.get(j).getSelected()==0){
                    return false;
                }
            }
        }
        return true;
    }

    //点击全选按钮时(全选或全不选)
    public void onAllChecked(boolean selected){
        for (int i=0;i<list.size();i++){
            List<Iphone.DataBean.ListBean> listBeans = this.list.get(i).getList();

            for (int j=0;j<listBeans.size();j++){
                listBeans.get(j).setSelected(selected ? 1 : 0);
            }
        }
    }

    //加减器
    public void NumberChanged(int groupPosition,int childPosition,int number){
        Iphone.DataBean.ListBean listBean = list.get(groupPosition).getList().get(childPosition);

        listBean.setNum(number);
    }
    //接口
    public interface ShopCart{
        //点击组条目checkbox
        void  selectGroup(int groupPosition);


        //点击子条目的checkbox
        void secectChild(int groupPosition,int childPosition);

        //点击加减器
        void numberchanged(int groupPosition,int childPosition,int number);

    }


    //计算商品总数量
    public int ProducttotalNumber(){
        int totalnumber = 0;
        for (int i=0;i<list.size();i++){
            List<Iphone.DataBean.ListBean> listBeans = this.list.get(i).getList();

            for (int j=0;j<listBeans.size();j++){
                if (listBeans.get(j).getSelected()==1){  //选中
                    int num = listBeans.get(j).getNum();
                    totalnumber+=num;
                }
            }
        }
        return totalnumber;
    }

    //总价钱
    public float totalPrice(){
        int totalPrice=0;
        for (int i=0;i<list.size();i++){
            List<Iphone.DataBean.ListBean> listBeans = this.list.get(i).getList();

            for (int j=0;j<listBeans.size();j++){
                if (listBeans.get(j).getSelected()==1){  //选中
                    int num = listBeans.get(j).getNum();
                    double price = listBeans.get(j).getPrice();
                    totalPrice += price *num;
                }
            }
        }
        return totalPrice;
    }



    public ShopCart mShopCart;

   public void setShopCart(ShopCart shopCart){
       mShopCart = shopCart;
   }

    @Override
    public boolean isChildSelectable(int groupPosition, int childPosition) {
        return false;
    }
    @Override
    public Object getGroup(int groupPosition) {
        return null;
    }

    @Override
    public Object getChild(int groupPosition, int childPosition) {
        return null;
    }

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

    @Override
    public long getChildId(int groupPosition, int childPosition) {
        return 0;
    }
    @Override
    public boolean hasStableIds() {
        return false;
    }

    public void setData(List<Iphone.DataBean> data) {
        this.list.clear();
        list.addAll(data);
        notifyDataSetChanged();
    }

    class GroupViewHolder{
        TextView tv;
        CheckBox group_check;

     }
     class ChildViewHolder{
        TextView title,price;
        ImageView image;
        CheckBox child_check;
        AddRemoveView addremove;

     }
}

activity_main

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

   <ExpandableListView
       android:layout_width="match_parent"
       android:layout_height="0dp"
       android:id="@+id/expandlistview"
       android:layout_weight="9"/>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:orientation="horizontal">
       <CheckBox
           android:layout_width="0dp"
           android:layout_height="match_parent"
           android:layout_weight="1"
           android:text="全选"
           android:id="@+id/allcheck"/>
       <TextView
           android:layout_width="0dp"
           android:layout_height="match_parent"
           android:layout_weight="3"
           android:text="合计:¥0.00"
           android:gravity="center"
           android:id="@+id/allprice"/>
       <Button
           android:layout_width="0dp"
           android:layout_height="match_parent"
           android:layout_weight="2"
           android:text="结算(0)"
           android:id="@+id/pay"/>
    </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="match_parent"
    android:orientation="horizontal">

    <CheckBox
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/group_check"/>
    <TextView
        android:id="@+id/tv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="商家"
        android:textSize="20sp"/>
</LinearLayout>

child布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    android:gravity="center_vertical"
    android:layout_height="120dp"
    android:layout_width="match_parent"
    xmlns:android="http://schemas.android.com/apk/res/android">
    <CheckBox
        android:id="@+id/child_check"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"/>
    <ImageView
        android:id="@+id/image"
        android:layout_height="100dp"
        android:layout_width="100dp"
        android:src="@color/colorPrimary"
        android:layout_marginLeft="20dp"/>
    <LinearLayout
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:orientation="vertical"
        android:layout_weight="1">
        <TextView
            android:id="@+id/title"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:text="商品标题"/>

        <TextView
            android:id="@+id/price"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:text="¥0.0"
            android:layout_marginTop="10dp"/>
    </LinearLayout>
    <com.bwie.shopcart.AddRemoveView
        android:id="@+id/add_remove_view"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:layout_marginRight="10dp"/>
</LinearLayout>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值