购物车表单

布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    android:orientation="vertical"
    xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
    android:layout_height="match_parent">
    <TextView
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:gravity="center"
        android:text="购物车"
        android:textColor="#ff3660"
        android:textSize="25sp" />

    <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="50dp"
        android:layout_alignParentBottom="true"
        android:background="@android:color/white"
        android:gravity="center_vertical">

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

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

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

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="10dp"
                android:text="合计 :" />


            <TextView
                android:id="@+id/tv_price"
                android:layout_width="wrap_content"
                android:layout_height="50dp"
                android:layout_marginLeft="10dp"
                android:paddingRight="10dp"
                android:text="0"
                android:textColor="@android:color/holo_red_light" />


            <TextView
                android:id="@+id/tv_num"
                android:layout_width="wrap_content"
                android:layout_height="50dp"
                android:background="@android:color/holo_red_dark"
                android:gravity="center"
                android:padding="10dp"
                android:text="结算(0)"
                android:textColor="@android:color/white" />
        </LinearLayout>
    </RelativeLayout>

</LinearLayout>
 
子布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:orientation="horizontal"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:fresco="http://schemas.android.com/tools">

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

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


        <com.facebook.drawee.view.SimpleDraweeView
            android:id="@+id/my_image_view"
            android:layout_width="80dp"

            android:layout_height="80dp"
            fresco:placeholderImage="@mipmap/ic_launcher" />

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

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

                <TextView
                    android:id="@+id/tv_tel"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:singleLine="true"
                    android:text="iphone6"

                    />

                <TextView
                    android:id="@+id/tv_pri"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="10dp"
                    android:text="¥3000.00"

                    />

                <LinearLayout
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="10dp"
                    android:gravity="center_vertical">

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

                        <Button
                            android:id="@+id/but_delete"
                            android:layout_width="22dp"
                            android:layout_height="22dp"
                            android:background="@drawable/remove" />

                        <TextView
                            android:id="@+id/et_number"
                            android:layout_width="40dp"
                            android:layout_height="wrap_content"
                            android:gravity="center"
                            android:inputType="number"

                            />

                        <Button
                            android:id="@+id/but_add"
                            android:layout_width="20dp"
                            android:layout_height="20dp"
                            android:background="@drawable/add" />
                    </LinearLayout>
                </LinearLayout>

            </LinearLayout>

            <TextView
                android:id="@+id/tv_del"
                android:layout_width="40dp"
                android:layout_height="40dp"
                android:layout_alignParentRight="true"
                android:layout_centerVertical="true"
                android:layout_marginRight="10dp"
                android:layout_marginTop="25dp"
                android:gravity="center"
                android:text="删除" />
        </RelativeLayout>
    </LinearLayout>
</LinearLayout>

主页面:
package com.example.com.moni.fragment;

import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.CheckBox;

import android.widget.ExpandableListView;
import android.widget.TextView;


import com.example.com.moni.R;
import com.example.com.moni.abapter.SeeExpandableListAdapter;

import com.example.com.moni.bean.SeeBean;
import com.example.com.moni.inter.IView;
import com.example.com.moni.presenter.SeePresenter;

import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.List;

import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.Unbinder;

/**
 * Created by 丶未央 on 2018/5/1.
 */

public class Fragmentfour extends Fragment implements IView<SeeBean>,SeeExpandableListAdapter.ChangeData {
    @BindView(R.id.elv)
    ExpandableListView elv;
    @BindView(R.id.checkbox2)
    CheckBox checkbox2;
    @BindView(R.id.tv_price)
    TextView tvPrice;
    @BindView(R.id.tv_num)
    TextView tvNum;
    Unbinder unbinder;
    private SeePresenter seePresenter;
    private int uid;

    private List<SeeBean.DataBean> listAll = new ArrayList<>();
    private SeeExpandableListAdapter adapter;
    private List<SeeBean.DataBean> data;
    private List<SeeBean.DataBean.ItemBean> list;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.four, container, false);
        unbinder = ButterKnife.bind(this, view);

        SharedPreferences addShop = getActivity().getSharedPreferences("addShop", Context.MODE_PRIVATE);
        uid = addShop.getInt("uid", 0);
        seePresenter = new SeePresenter(this);
        seePresenter.getData(uid + "");




        checkbox2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if(checkbox2.isChecked()){
                    for (int i = 0; i < data.size(); i++) {
                        SeeBean.DataBean dataBean = data.get(i);
                        dataBean.setIscheck(true);
                        for (int j = 0; j < dataBean.getList().size(); j++) {
                            SeeBean.DataBean.ItemBean itemBean = dataBean.getList().get(j);
                            itemBean.setIsscheck(true);
                        }
                    }
                }else {
                    for (int i = 0; i < data.size(); i++) {
                        SeeBean.DataBean dataBean = data.get(i);
                        dataBean.setIscheck(false);
                        for (int j = 0; j < dataBean.getList().size(); j++) {
                            SeeBean.DataBean.ItemBean itemBean = dataBean.getList().get(j);
                            itemBean.setIsscheck(false);
                        }
                    }
                }
                getMoney();
            }
        });
        return view;

    }

    @Override
    public void OnSuccess(SeeBean seeBean) {
        data = seeBean.getData();

        listAll.clear();
        listAll.addAll(data);
        adapter = new SeeExpandableListAdapter(getActivity(),listAll);
        elv.setAdapter(adapter);
        adapter.setShoping(Fragmentfour.this);
        for (int i = 0; i < data.size(); i++) {
            elv.expandGroup(i);
        }

    }

    @Override
    public void onHiddenChanged(boolean hidden) {

        getData();

        super.onHiddenChanged(hidden);
    }

    private void getData() {

        seePresenter.getData(uid+"");

    }

    @Override
    public void onDestroyView() {
        super.onDestroyView();
        unbinder.unbind();
    }

    private void getMoney() {
        DecimalFormat df   = new DecimalFormat("######0.00");

        double zon = 0;
        int num = 0;
        for (int i = 0; i < listAll.size(); i++) {
            list = listAll.get(i).getList();
            for (int j = 0; j < list.size() ; j++) {
                if(list.get(j).isIsscheck()){
                    zon += list.get(j).getNum() * list.get(j).getPrice();
                    num += list.get(j).getNum();
                }

            }
        }
        tvPrice.setText("总价:" + df.format(zon));
        tvNum.setText("结算("+num+")");
        adapter.notifyDataSetChanged();
    }

    @Override
    public void jiaNum(int i, int position) {

        List<SeeBean.DataBean.ItemBean> listone = data.get(i).getList();
        int num = listone.get(position).getNum();
        num++;
        listone.get(position).setNum(num);

        getMoney();
    }

    @Override
    public void jianNum(int i, int position, Button but) {
        List<SeeBean.DataBean.ItemBean> listone = data.get(i).getList();
        int num = listone.get(position).getNum();
        num--;
        listone.get(position).setNum(num);

        getMoney();
    }

    @Override
    public void click(int i,int i1,boolean checked) {

        data.get(i).getList().get(i1).setIsscheck(checked);

        getMoney();
    }

    @Override
    public void groupclick(int i, boolean ischeck) {
        data.get(i).setIscheck(ischeck);

        List<SeeBean.DataBean.ItemBean> list = data.get(i).getList();

        for (int j = 0; j < list.size(); j++) {
            if(data.get(i).isIscheck()){
                list.get(j).setIsscheck(true);
            }else{
                list.get(j).setIsscheck(false);
            }
        }

        getMoney();
    }

    @Override
    public void removeMoney() {
        getMoney();
    }








}

 
适配器:
package com.example.com.moni.abapter;

import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.net.Uri;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.ImageView;
import android.widget.TextView;

import com.example.com.moni.R;
import com.example.com.moni.bean.SeeBean;
import com.facebook.drawee.view.SimpleDraweeView;

import java.util.List;

/**
 * Created by 丶未央 on 2018/5/3.
 */

public class SeeExpandableListAdapter extends BaseExpandableListAdapter{
    Context context;
    List<SeeBean.DataBean> data;
    List<SeeBean.DataBean.ItemBean> list;
    public SeeExpandableListAdapter(Context context, List<SeeBean.DataBean> data) {
        this.context=context;
        this.data=data;
    }

    ChangeData changeData;

    public void setShoping(ChangeData changeData){
        this.changeData = changeData;
    }

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

    @Override
    public int getChildrenCount(int i) {
        return data.get(i).getList().size();
    }

    @Override
    public Object getGroup(int i) {
        return data.get(i);
    }

    @Override
    public Object getChild(int i, int i1) {
        return data.get(i).getList().get(i1);
    }

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

    @Override
    public long getChildId(int i, int i1) {
        return i1;
    }

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

    @Override
    public View getGroupView(final int i, boolean b, View view, ViewGroup viewGroup) {
        final GroupViewHolder holder;
        if (view == null) {
            holder = new GroupViewHolder();
            view = view.inflate(context, R.layout.shouitemone, null);
            holder.ck = view.findViewById(R.id.cb_parent);
            holder.name = view.findViewById(R.id.tv_number);
            view.setTag(holder);
        } else {
            holder = (GroupViewHolder) view.getTag();
        }
        final SeeBean.DataBean dataBean = data.get(i);
        holder.ck.setChecked(dataBean.isIscheck());
//        holder.tv_number.setText(dataBean.getTitle());
        holder.name.setText(dataBean.getSellerName());

        //一级checkbox
        holder.ck.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                changeData.groupclick(i,holder.ck.isChecked());
            }
        });

        return view;
    }

    @Override
    public View getChildView(final int i, final int i1, final boolean b, View view, ViewGroup viewGroup) {
        final ChildViewHolder holder;
        if (view == null) {
            holder = new ChildViewHolder();
            view = view.inflate(context,R.layout.shouitemtwo, null);
            holder.cck = view.findViewById(R.id.cb_child);
            holder.name = view.findViewById(R.id.tv_tel);
            holder.num =view.findViewById(R.id.et_number);
            holder.img = (SimpleDraweeView) view.findViewById(R.id.my_image_view);
            holder.price = view.findViewById(R.id.tv_pri);
            holder.rem = view.findViewById(R.id.tv_del);
            holder.add = view.findViewById(R.id.but_add);
            holder.delete = view.findViewById(R.id.but_delete);
            view.setTag(holder);
        } else {
            holder = (ChildViewHolder) view.getTag();
        }
        final SeeBean.DataBean.ItemBean datasBean = data.get(i).getList().get(i1);

        holder.cck.setChecked(datasBean.isIsscheck());
        holder.name.setText(datasBean.getTitle());

        holder.price.setText("¥"+datasBean.getPrice() );

        if(datasBean.getNum() == 1){
            holder.delete.setEnabled(false);
        } else{
            holder.delete.setEnabled(true);
        }
        holder.num.setText(datasBean.getNum()+"");

        String images = datasBean.getImages().trim();
        String[] split = images.split("[\\|]");
        holder.img.setImageURI(Uri.parse(split[0]));

        //删除
        holder.rem.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                AlertDialog.Builder builder = new AlertDialog.Builder(context);
                builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        list.get(i).setIsscheck(false);
                        changeData.removeMoney();
                        list.remove(i);

                        notifyDataSetChanged();
                    }
                });
                builder.setTitle("警告");
                builder.setMessage("确定删除嘛?");
                builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {

                    }
                });
                builder.show();

            }
        });

        //加
        holder.add.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                changeData.jiaNum(i,i1);
            }
        });
        //减
        holder.delete.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                changeData.jianNum(i,i1,holder.delete);
            }
        });

        //二级checkbox
       holder.cck.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //设置该条目对象里的checked属性值
                changeData.click(i,i1,holder.cck.isChecked());
            }
        });


        return view;
    }

    @Override
    public boolean isChildSelectable(int i, int i1) {
        return true;
    }
    class GroupViewHolder{
        CheckBox ck;
        TextView name;
    }
    class ChildViewHolder{
        CheckBox cck;
        ImageView img;
        TextView name,price,num,rem;
        Button add,delete;
    }
    public interface ChangeData{
        void jiaNum(int i, int i1);
        void jianNum(int i, int i1, Button but);
        void click(int i,int i1,boolean ischeck);
        void groupclick(int i,boolean ischeck);
        void removeMoney();
    }
}

 

如何实现? 对于实现购物车表单的全选按钮和取消全选按钮,以下是应该考虑的步骤: 1. 在购物车表单前面增加一个全选复选框,用于选择或取消所有复选框。 2. 针对每个商品的复选框,增加一个点击事件,当点击复选框时,根据复选框的选中状态更新购物车总价。 3. 在全选复选框的点击事件中,对所有商品的复选框进行选中或取消选中操作,并重新计算购物车总价。 下面是可能的实现代码: HTML代码: ```html <!-- 全选/取消全选按钮 --> <input type="checkbox" id="select-all">全选/取消全选 <br> <!-- 商品列表 --> <table> <tr> <th>商品名称</th> <th>价格</th> <th>选择</th> </tr> <tr> <td>商品1</td> <td>10元</td> <td><input type="checkbox" class="item-checkbox" value="10"></td> </tr> <tr> <td>商品2</td> <td>20元</td> <td><input type="checkbox" class="item-checkbox" value="20"></td> </tr> <tr> <td>商品3</td> <td>30元</td> <td><input type="checkbox" class="item-checkbox" value="30"></td> </tr> </table> <!-- 购物车总价 --> 总价:<span id="total-price">0元</span> ``` JavaScript代码: ```javascript // 获取全选/取消全选按钮和商品复选框 let selectAllCheckbox = document.getElementById("select-all"); let itemCheckboxes = document.querySelectorAll(".item-checkbox"); // 为全选/取消全选按钮添加点击事件 selectAllCheckbox.addEventListener("click", function() { // 更新商品复选框状态 itemCheckboxes.forEach(function(item) { item.checked = selectAllCheckbox.checked; }); // 计算购物车总价 let totalPrice = 0; itemCheckboxes.forEach(function(item) { if (item.checked) { totalPrice += Number(item.value); } }); document.getElementById("total-price").innerHTML = totalPrice + "元"; }); // 为商品复选框添加点击事件 itemCheckboxes.forEach(function(item) { item.addEventListener("click", function() { // 计算购物车总价 let totalPrice = 0; itemCheckboxes.forEach(function(item) { if (item.checked) { totalPrice += Number(item.value); } }); document.getElementById("total-price").innerHTML = totalPrice + "元"; // 更新全选/取消全选按钮状态 selectAllCheckbox.checked = (itemCheckboxes.length == document.querySelectorAll(".item-checkbox:checked").length); }); }); ``` 希望这个回答能够帮到您!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值