An_購物車實現(xiàn)思想

封裝bean類:

package com.example.shoppingcardemo.bean;

/**
 * 作者:author
 * 時間 :* 說明:
 */

public class Bean {
    private String price;
    private String number;

    public Bean(String price, String number) {
        this.price = price;
        this.number = number;
    }

    public String getPrice() {
        return price;
    }

    public void setPrice(String price) {
        this.price = price;
    }

    public String getNumber() {
        return number;
    }

    public void setNumber(String number) {
        this.number = number;
    }

}

先看布局:MainActivity

<?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"
    tools:context="com.example.shoppingcardemo.MainActivity"
    android:orientation="vertical">


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

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="50dp">

        <CheckBox
            android:id="@+id/checkAll"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_gravity="center_vertical"
            android:layout_marginLeft="15dp"
            android:drawablePadding="5dp"
            android:text="全選"
            android:textColor="#6b6868"
            android:textSize="18sp" />

        <TextView
            android:id="@+id/price"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_marginLeft="10dp"
            android:layout_toRightOf="@id/checkAll"
            android:gravity="center"
            android:text="合計:¥0.00"
            android:textColor="#000000"
            android:textSize="18sp" />

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_alignParentRight="true"
            android:background="#ff0000">

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:background="#ff0000"
                android:gravity="center"
                android:paddingLeft="30dp"
                android:text="去結(jié)算"
                android:textColor="#ffffff"
                android:textSize="22sp" />

            <TextView
                android:id="@+id/checked_shop"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:background="#ff0000"
                android:gravity="center"
                android:paddingRight="30dp"
                android:text="(0)"
                android:textColor="#ffffff"
                android:textSize="13sp" />
        </LinearLayout>

    </RelativeLayout>

</LinearLayout>

group_item:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">
    <CheckBox
        android:id="@+id/group_ck"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="10dp"
        android:focusable="false" />

    <TextView
        android:id="@+id/group_tv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />


</LinearLayout>

child_item

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

        <CheckBox
            android:id="@+id/child_ck"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="50dp" />

        <TextView
            android:id="@+id/child_tv"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    </LinearLayout>

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="40dp"
        android:layout_marginTop="10dp">

        <TextView
            android:id="@+id/danjia"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="200dp"
            android:text="100元"
            android:textColor="#ff0000" />

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

            <TextView
                android:id="@+id/jianshao"
                android:layout_width="20dp"
                android:layout_height="30dp"
                android:gravity="center"
                android:text="-"
                android:textSize="20sp"
                android:textStyle="bold" />

            <TextView
                android:id="@+id/number"
                android:layout_width="wrap_content"
                android:layout_height="30dp"
                android:layout_marginLeft="10dp"
                android:layout_marginRight="10dp"
                android:gravity="center"
                android:text="1"
                android:textSize="20sp"
                android:textStyle="bold" />

            <TextView
                android:id="@+id/zengjia"
                android:layout_width="20dp"
                android:layout_height="30dp"
                android:layout_marginRight="20dp"
                android:gravity="center"
                android:text="+"
                android:textSize="20sp"
                android:textStyle="bold" />
        </LinearLayout>
    </RelativeLayout>
</LinearLayout>

接下來是主Activity:

package com.example.shoppingcardemo;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.CheckBox;
import android.widget.ExpandableListView;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {
    private ExpandableListView listview;
    private MyAdapter adpater;
    private TextView checked_shop;
    private TextView price;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        listview = (ExpandableListView) findViewById(R.id.listview);
        adpater = new MyAdapter(this);
        listview.setAdapter(adpater);
        final CheckBox checkAll = (CheckBox) findViewById(R.id.checkAll);
        price = (TextView) findViewById(R.id.price);
        checked_shop = (TextView) findViewById(R.id.checked_shop);
        checkAll.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //設(shè)置商品全部選中
                adpater.checkAllShop(checkAll.isChecked());
                //計算選中的價格和數(shù)量
                String shopPrice = adpater.getShopPrice();
                //判斷商品是否全部選中
                boolean b = adpater.selectAll();

                String[] split = shopPrice.split(",");
                price.setText(split[0]);
                checked_shop.setText(split[1]);
                checkAll.setChecked(b);
            }
        });
        adpater.getAdapterData(new MyAdapter.AdapterData() {
            @Override
            public void Data(View v, String str, boolean b) {
                String[] split = str.split(",");
                price.setText(split[0]);
                checked_shop.setText(split[1]);
                checkAll.setChecked(b);
            }
        });

        checkAll.setChecked(adpater.selectAll());
        adpater.notifyDataSetChanged();
    }

}


最后是adapter類:
MyAdapter

package com.example.shoppingcardemo;

import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.CheckBox;
import android.widget.TextView;

import com.example.shoppingcardemo.bean.Bean;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * 作者:author
 * 時間 :
 * 說明:
 */

public class MyAdapter extends BaseExpandableListAdapter {
    private Context context;
    private String[] group;
    private String[][] child;
    private HashMap<Integer, Boolean> groupHashMap;
    private List<HashMap<Integer, Boolean>> childList;
    private List<List<Bean>> dataList;

    public MyAdapter(Context context) {
        this.context = context;
        initData();
    }

    private void initData() {
        group = new String[5];
        child = new String[5][];
        groupHashMap = new HashMap<>();
        childList = new ArrayList<>();
        dataList = new ArrayList<>();

        for (int i = 0; i < 5; i++) {
            group[i] = "商家" + i;
            groupHashMap.put(i, false);


            String[] strings = new String[3];
            HashMap<Integer, Boolean> map = new HashMap<>();
            ArrayList<Bean> been = new ArrayList<>();
            for (int y = 0; y < 3; y++) {
                strings[y] = "商家" + i + "商品" + y;

                map.put(y, false);

                Bean bean = new Bean("100", "1");
                been.add(bean);
            }

            child[i] = strings;
            childList.add(map);
            dataList.add(been);
        }
    }

    @Override
    public int getGroupCount() {
        return group.length;
    }

    @Override
    public int getChildrenCount(int groupPosition) {
        return child[groupPosition].length;
    }

    @Override
    public Object getGroup(int groupPosition) {
        return group[groupPosition];
    }

    @Override
    public Object getChild(int groupPosition, int childPosition) {
        return child[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) {
        GroupViewHolder holder = null;
        if (convertView == null) {
            convertView = View.inflate(context, R.layout.group_item, null);
            holder = new GroupViewHolder();
            holder.tv = (TextView) convertView.findViewById(R.id.group_tv);
            holder.ck = (CheckBox) convertView.findViewById(R.id.group_ck);
            convertView.setTag(holder);
        } else {
            holder = (GroupViewHolder) convertView.getTag();
        }
        holder.tv.setText(group[groupPosition]);
        holder.ck.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                groupHashMap.put(groupPosition, !groupHashMap.get(groupPosition));
                //設(shè)置二級列表的選中狀態(tài),根據(jù)一級列表的狀態(tài)來改變
                setChildCheckAll();
                //計算選中的價格和數(shù)量
                String shopPrice = getShopPrice();
                //判斷商品是否全部選中
                boolean b = selectAll();
                adapterData.Data(v, shopPrice, b);

            }

        });

        holder.ck.setChecked(groupHashMap.get(groupPosition));
        return convertView;
    }

    @Override
    public View getChildView(final int groupPosition, final int childPosition,
                             boolean isLastChild, View convertView, ViewGroup parent) {
        ChildViewHolder holder = null;
        if (convertView == null) {
            convertView = View.inflate(context, R.layout.child_item, null);
            holder = new ChildViewHolder();
            holder.tv = (TextView) convertView.findViewById(R.id.child_tv);
            holder.ck = (CheckBox) convertView.findViewById(R.id.child_ck);
            holder.jianshao = (TextView) convertView.findViewById(R.id.jianshao);
            holder.zengjia = (TextView) convertView.findViewById(R.id.zengjia);
            holder.number = (TextView) convertView.findViewById(R.id.number);
            convertView.setTag(holder);
        } else {
            holder = (ChildViewHolder) convertView.getTag();
        }
        holder.tv.setText(child[groupPosition][childPosition]);
        holder.ck.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                HashMap<Integer, Boolean> hashMap = childList.get(groupPosition);
                hashMap.put(childPosition, !hashMap.get(childPosition));
                //判斷二級列表是否全部選中
                ChildisChecked(groupPosition);
                //計算選中的價格和數(shù)量
                String shopPrice = getShopPrice();
                //判斷商品是否全部選中
                boolean b = selectAll();
                adapterData.Data(v, shopPrice, b);
            }
        });
        final ChildViewHolder finalHolder = holder;
        holder.zengjia.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                List<Bean> been = dataList.get(groupPosition);
                String num = finalHolder.number.getText().toString();
                int i = Integer.parseInt(num);
                ++i;
                been.get(childPosition).setNumber(i + "");
                //計算選中的價格和數(shù)量
                String shopPrice = getShopPrice();
                //判斷商品是否全部選中
                boolean b = selectAll();
                adapterData.Data(v, shopPrice, b);
                notifyDataSetChanged();
            }
        });
        holder.jianshao.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                List<Bean> been = dataList.get(groupPosition);
                String num = finalHolder.number.getText().toString();
                int i = Integer.parseInt(num);
                if (i > 1) {
                    --i;
                }
                been.get(childPosition).setNumber(i + "");
                //計算選中的價格和數(shù)量
                String shopPrice = getShopPrice();
                //判斷商品是否全部選中
                boolean b = selectAll();
                adapterData.Data(v, shopPrice, b);
                notifyDataSetChanged();
            }
        });

        holder.number.setText(dataList.get(groupPosition).get(childPosition).getNumber().toString());

        holder.ck.setChecked(childList.get(groupPosition).get(childPosition));
        return convertView;
    }


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

    class GroupViewHolder {
        TextView tv;
        CheckBox ck;
    }

    class ChildViewHolder {
        TextView tv;
        CheckBox ck;
        TextView jianshao;
        TextView zengjia;
        TextView number;
    }

    //設(shè)置二級列表的選中狀態(tài),根據(jù)一級列表的狀態(tài)來改變
    private void setChildCheckAll() {
        for (int i = 0; i < childList.size(); i++) {
            HashMap<Integer, Boolean> integerBooleanHashMap1 = childList.get(i);
            Set<Map.Entry<Integer, Boolean>> entries = integerBooleanHashMap1.entrySet();
            for (Map.Entry<Integer, Boolean> entry : entries) {
                entry.setValue(groupHashMap.get(i));
            }
        }
        notifyDataSetChanged();
    }

    //判斷二級列表是否全部選中
    private void ChildisChecked(int groupPosition) {
        boolean ischecked = true;
        HashMap<Integer, Boolean> hashMap = childList.get(groupPosition);
        Set<Map.Entry<Integer, Boolean>> entries = hashMap.entrySet();
        for (Map.Entry<Integer, Boolean> entry : entries) {
            if (!entry.getValue()) {
                ischecked = false;
                break;
            }
        }
        groupHashMap.put(groupPosition, ischecked);
        notifyDataSetChanged();
    }

    //全選
    public void checkAllShop(boolean checked) {
        Set<Map.Entry<Integer, Boolean>> entries = groupHashMap.entrySet();
        for (Map.Entry<Integer, Boolean> entry : entries) {
            entry.setValue(checked);
        }
        //調(diào)用讓二級列表全選的方法
        setChildCheckAll();
        notifyDataSetChanged();
    }

    //計算價格
    public String getShopPrice() {
        int price = 0;
        int number = 0;
        for (int y = 0; y < childList.size(); y++) {
            HashMap<Integer, Boolean> integerBooleanHashMap1 = childList.get(y);
            Set<Map.Entry<Integer, Boolean>> entries = integerBooleanHashMap1.entrySet();
            for (Map.Entry<Integer, Boolean> entry : entries) {
                if (entry.getValue()) {
                    Bean bean = dataList.get(y).get(entry.getKey());
                    price += Integer.parseInt(bean.getPrice()) * Integer.parseInt(bean.getNumber());
                    number += Integer.parseInt(bean.getNumber());
                }
            }
        }
        return price + "," + number;
    }

    //編輯一級和二級列表,如果全部選中,全選按鈕也選中
    public boolean selectAll() {
        boolean isChecked = true;
        for (int y = 0; y < childList.size(); y++) {
            HashMap<Integer, Boolean> hashMap = childList.get(y);
            Set<Map.Entry<Integer, Boolean>> entries = hashMap.entrySet();
            for (Map.Entry<Integer, Boolean> entry : entries) {
                if (!entry.getValue()) {
                    isChecked = false;
                    break;
                }
            }
        }
        return isChecked;
    }

    private AdapterData adapterData;

    public interface AdapterData {
        void Data(View v, String str, boolean b);

    }

    public void getAdapterData(AdapterData adapterData) {
        this.adapterData = adapterData;
    }
}

根據(jù)上述我們可以通過okhttp來請求個數(shù)據(jù)來實現(xiàn)(改變adapter就可以了)

package com.example.shoppingcardemo;

import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.CheckBox;
import android.widget.TextView;

import com.example.shoppingcardemo.bean.Bean;
import com.example.shoppingcardemo.bean.Bean2;
import com.example.shoppingcardemo.ok.OkHttpUtils;
import com.example.shoppingcardemo.ok.OnUiCallback;
import com.google.gson.Gson;

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

import okhttp3.Call;

/**
 * 作者:author
 * 時間 :2017/10/24:19:19
 * 說明:
 */

public class MyAdapter extends BaseExpandableListAdapter {
    private Context context;
    private String[] group;
    private String[][] child;
    private HashMap<Integer, Boolean> groupHashMap;
    private List<HashMap<Integer, Boolean>> childList;
    private List<List<Bean>> dataList;
    List<Bean2.DatasBean.ClassListBean> class_list;
    public MyAdapter(Context context) {
        this.context = context;
        initData();
    }

    private void initData() {
        OkHttpUtils.getInstance().doGet("http://169.254.35.159/mobile/index.php?
        act=goods_class&op=get_child_all&gc_id=1", new OnUiCallback() {
            @Override
            public void onFailed(Call call, IOException e) {

            }

            @Override
            public void onSuccess(String result) throws IOException {
                Gson gson = new Gson();
                Bean2 bean2 = gson.fromJson(result, Bean2.class);
                class_list = bean2.getDatas().getClass_list();
                group = new String[class_list.size()];
                child = new String[class_list.size()][];
                groupHashMap = new HashMap<>();
                childList = new ArrayList<>();
                dataList = new ArrayList<>();

                for (int i = 0; i < class_list.size(); i++) {
                    group[i] = class_list.get(i).getGc_name();
                    groupHashMap.put(i, false);


                    String[] strings = new String[class_list.get(i).getChild().size()];
                    HashMap<Integer, Boolean> map = new HashMap<>();
                    ArrayList<Bean> been = new ArrayList<>();

                    for (int y = 0; y <class_list.get(i).getChild().size(); y++) {
                        strings[y] =class_list.get(i).getGc_name() + class_list.get(i).
                        getChild().get(y).getGc_name();
                        map.put(y, false);
                        Bean bean = new Bean("100", "1");
                        been.add(bean);
                    }
                    child[i] = strings;
                    childList.add(map);
                    dataList.add(been);
                }
            }
        });

    }

    @Override
    public int getGroupCount() {
        return group==null?0:group.length;
    }

    @Override
    public int getChildrenCount(int groupPosition) {
        return child[groupPosition].length;
    }

    @Override
    public Object getGroup(int groupPosition) {
        return group[groupPosition];
    }

    @Override
    public Object getChild(int groupPosition, int childPosition) {
        return child[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) {
        GroupViewHolder holder = null;
        if (convertView == null) {
            convertView = View.inflate(context, R.layout.group_item, null);
            holder = new GroupViewHolder();
            holder.tv = (TextView) convertView.findViewById(R.id.group_tv);
            holder.ck = (CheckBox) convertView.findViewById(R.id.group_ck);
            convertView.setTag(holder);
        } else {
            holder = (GroupViewHolder) convertView.getTag();
        }
        holder.tv.setText(group[groupPosition]);
        holder.ck.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                groupHashMap.put(groupPosition, !groupHashMap.get(groupPosition));
                //設(shè)置二級列表的選中狀態(tài),根據(jù)一級列表的狀態(tài)來改變
                setChildCheckAll();
                //計算選中的價格和數(shù)量
                String shopPrice = getShopPrice();
                //判斷商品是否全部選中
                boolean b = selectAll();
                adapterData.Data(v, shopPrice, b);

            }

        });

        holder.ck.setChecked(groupHashMap.get(groupPosition));
        return convertView;
    }

    @Override
    public View getChildView(final int groupPosition, final int childPosition,
                             boolean isLastChild, View convertView, ViewGroup parent) {
        ChildViewHolder holder = null;
        if (convertView == null) {
            convertView = View.inflate(context, R.layout.child_item, null);
            holder = new ChildViewHolder();
            holder.tv = (TextView) convertView.findViewById(R.id.child_tv);
            holder.ck = (CheckBox) convertView.findViewById(R.id.child_ck);
            holder.jianshao = (TextView) convertView.findViewById(R.id.jianshao);
            holder.zengjia = (TextView) convertView.findViewById(R.id.zengjia);
            holder.number = (TextView) convertView.findViewById(R.id.number);
            convertView.setTag(holder);
        } else {
            holder = (ChildViewHolder) convertView.getTag();
        }
        holder.tv.setText(child[groupPosition][childPosition]);
        holder.ck.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                HashMap<Integer, Boolean> hashMap = childList.get(groupPosition);
                hashMap.put(childPosition, !hashMap.get(childPosition));
                //判斷二級列表是否全部選中
                ChildisChecked(groupPosition);
                //計算選中的價格和數(shù)量
                String shopPrice = getShopPrice();
                //判斷商品是否全部選中
                boolean b = selectAll();
                adapterData.Data(v, shopPrice, b);
            }
        });
        final ChildViewHolder finalHolder = holder;
        holder.zengjia.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                List<Bean> been = dataList.get(groupPosition);
                String num = finalHolder.number.getText().toString();
                int i = Integer.parseInt(num);
                ++i;
                been.get(childPosition).setNumber(i + "");
                //計算選中的價格和數(shù)量
                String shopPrice = getShopPrice();
                //判斷商品是否全部選中
                boolean b = selectAll();
                adapterData.Data(v, shopPrice, b);
                notifyDataSetChanged();
            }
        });
        holder.jianshao.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                List<Bean> been = dataList.get(groupPosition);
                String num = finalHolder.number.getText().toString();
                int i = Integer.parseInt(num);
                if (i > 1) {
                    --i;
                }
                been.get(childPosition).setNumber(i + "");
                //計算選中的價格和數(shù)量
                String shopPrice = getShopPrice();
                //判斷商品是否全部選中
                boolean b = selectAll();
                adapterData.Data(v, shopPrice, b);
                notifyDataSetChanged();
            }
        });

        holder.number.setText(dataList.get(groupPosition).get(childPosition).getNumber().toString());

        holder.ck.setChecked(childList.get(groupPosition).get(childPosition));
        return convertView;
    }


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

    class GroupViewHolder {
        TextView tv;
        CheckBox ck;
    }

    class ChildViewHolder {
        TextView tv;
        CheckBox ck;
        TextView jianshao;
        TextView zengjia;
        TextView number;
    }

    //設(shè)置二級列表的選中狀態(tài),根據(jù)一級列表的狀態(tài)來改變
    private void setChildCheckAll() {
        for (int i = 0; i < childList.size(); i++) {
            HashMap<Integer, Boolean> integerBooleanHashMap1 = childList.get(i);
            Set<Map.Entry<Integer, Boolean>> entries = integerBooleanHashMap1.entrySet();
            for (Map.Entry<Integer, Boolean> entry : entries) {
                entry.setValue(groupHashMap.get(i));
            }
        }
        notifyDataSetChanged();
    }

    //判斷二級列表是否全部選中
    private void ChildisChecked(int groupPosition) {
        boolean ischecked = true;
        HashMap<Integer, Boolean> hashMap = childList.get(groupPosition);
        Set<Map.Entry<Integer, Boolean>> entries = hashMap.entrySet();
        for (Map.Entry<Integer, Boolean> entry : entries) {
            if (!entry.getValue()) {
                ischecked = false;
                break;
            }
        }
        groupHashMap.put(groupPosition, ischecked);
        notifyDataSetChanged();
    }

    //全選
    public void checkAllShop(boolean checked) {
        Set<Map.Entry<Integer, Boolean>> entries = groupHashMap.entrySet();
        for (Map.Entry<Integer, Boolean> entry : entries) {
            entry.setValue(checked);
        }
        //調(diào)用讓二級列表全選的方法
        setChildCheckAll();
        notifyDataSetChanged();
    }

    //計算價格
    public String getShopPrice() {
        int price = 0;
        int number = 0;
        for (int y = 0; y < childList.size(); y++) {
            HashMap<Integer, Boolean> integerBooleanHashMap1 = childList.get(y);
            Set<Map.Entry<Integer, Boolean>> entries = integerBooleanHashMap1.entrySet();
            for (Map.Entry<Integer, Boolean> entry : entries) {
                if (entry.getValue()) {
                    Bean bean = dataList.get(y).get(entry.getKey());
                    price += Integer.parseInt(bean.getPrice()) * Integer.parseInt(bean.getNumber());
                    number += Integer.parseInt(bean.getNumber());
                }
            }
        }
        return price + "," + number;
    }

    //編輯一級和二級列表,如果全部選中,全選按鈕也選中
    public boolean selectAll() {
        boolean isChecked = true;
        if(childList!=null){
            for (int y = 0; y < childList.size(); y++) {
                HashMap<Integer, Boolean> hashMap = childList.get(y);
                Set<Map.Entry<Integer, Boolean>> entries = hashMap.entrySet();
                for (Map.Entry<Integer, Boolean> entry : entries) {
                    if (!entry.getValue()) {
                        isChecked = false;
                        break;
                    }
                }
            }
        }

        return isChecked;
    }

    private AdapterData adapterData;

    public interface AdapterData {
        void Data(View v, String str, boolean b);

    }

    public void getAdapterData(AdapterData adapterData) {
        this.adapterData = adapterData;
    }
}



別忘了在bean的包里加一個bean2(此類是json解析):

/**
     * code : 200
     * datas : {"class_list":[{"gc_id":"4","gc_name":"女裝","child":[{"gc_id":"12","gc_name":"T恤"},{"gc_id":"13","gc_name":"襯衫"},{"gc_id":"14","gc_name":"針織衫"},{"gc_id":"15","gc_name":"雪紡衫"},{"gc_id":"16","gc_name":"衛(wèi)衣"},{"gc_id":"17","gc_name":"馬甲"},{"gc_id":"18","gc_name":"連衣裙"},{"gc_id":"19","gc_name":"半身裙"},{"gc_id":"20","gc_name":"牛仔褲"},{"gc_id":"21","gc_name":"休閑褲"},{"gc_id":"22","gc_name":"打底褲"},{"gc_id":"23","gc_name":"正裝褲"},{"gc_id":"24","gc_name":"西服"},{"gc_id":"25","gc_name":"短外套"},{"gc_id":"26","gc_name":"風(fēng)衣"},{"gc_id":"27","gc_name":"大衣"},{"gc_id":"28","gc_name":"皮衣皮草"},{"gc_id":"29","gc_name":"棉服"},{"gc_id":"30","gc_name":"羽絨服"},{"gc_id":"31","gc_name":"孕婦裝"},{"gc_id":"32","gc_name":"大碼裝"},{"gc_id":"33","gc_name":"中老年裝"},{"gc_id":"34","gc_name":"婚紗禮服"},{"gc_id":"1053","gc_name":"女裝"}]},{"gc_id":"5","gc_name":"男裝","child":[{"gc_id":"35","gc_name":"襯衫"},{"gc_id":"36","gc_name":"T恤"},{"gc_id":"37","gc_name":"POLO衫"},{"gc_id":"38","gc_name":"針織衫"},{"gc_id":"39","gc_name":"羊絨衫"},{"gc_id":"40","gc_name":"衛(wèi)衣"},{"gc_id":"41","gc_name":"馬甲/背心"},{"gc_id":"42","gc_name":"夾克"},{"gc_id":"43","gc_name":"風(fēng)衣"},{"gc_id":"44","gc_name":"大衣"},{"gc_id":"45","gc_name":"皮衣"},{"gc_id":"46","gc_name":"外套"},{"gc_id":"47","gc_name":"西服"},{"gc_id":"48","gc_name":"棉服"},{"gc_id":"49","gc_name":"羽絨服"},{"gc_id":"50","gc_name":"牛仔褲"},{"gc_id":"51","gc_name":"休閑褲"},{"gc_id":"52","gc_name":"西褲"},{"gc_id":"53","gc_name":"西服套裝"},{"gc_id":"54","gc_name":"大碼裝"},{"gc_id":"55","gc_name":"中老年裝"},{"gc_id":"56","gc_name":"唐裝"},{"gc_id":"57","gc_name":"工裝"}]},{"gc_id":"6","gc_name":"內(nèi)衣","child":[{"gc_id":"58","gc_name":"文胸"},{"gc_id":"59","gc_name":"女式內(nèi)褲"},{"gc_id":"60","gc_name":"男式內(nèi)褲"},{"gc_id":"61","gc_name":"家居"},{"gc_id":"62","gc_name":"睡衣"},{"gc_id":"63","gc_name":"塑身衣"},{"gc_id":"64","gc_name":"睡袍/浴袍"},{"gc_id":"65","gc_name":"泳衣"},{"gc_id":"66","gc_name":"背心"},{"gc_id":"67","gc_name":"抹胸"},{"gc_id":"68","gc_name":"連褲襪"},{"gc_id":"69","gc_name":"美腿襪"},{"gc_id":"70","gc_name":"男襪"},{"gc_id":"71","gc_name":"女襪"},{"gc_id":"72","gc_name":"情趣內(nèi)衣"},{"gc_id":"73","gc_name":"保暖內(nèi)衣"}]},{"gc_id":"7","gc_name":"運動","child":[{"gc_id":"74","gc_name":"休閑鞋"},{"gc_id":"75","gc_name":"帆布鞋"},{"gc_id":"76","gc_name":"跑步鞋"},{"gc_id":"77","gc_name":"籃球鞋"},{"gc_id":"78","gc_name":"足球鞋"},{"gc_id":"79","gc_name":"訓(xùn)練鞋"},{"gc_id":"80","gc_name":"乒羽鞋"},{"gc_id":"81","gc_name":"拖鞋"},{"gc_id":"82","gc_name":"衛(wèi)衣"},{"gc_id":"83","gc_name":"夾克"},{"gc_id":"84","gc_name":"T恤"},{"gc_id":"85","gc_name":"棉服/羽絨服"},{"gc_id":"86","gc_name":"運動褲"},{"gc_id":"87","gc_name":"套裝"},{"gc_id":"88","gc_name":"運動包"},{"gc_id":"89","gc_name":"運動配件"}]},{"gc_id":"8","gc_name":"女鞋","child":[{"gc_id":"90","gc_name":"平底鞋"},{"gc_id":"91","gc_name":"高跟鞋"},{"gc_id":"92","gc_name":"單鞋"},{"gc_id":"93","gc_name":"休閑鞋"},{"gc_id":"94","gc_name":"涼鞋"},{"gc_id":"95","gc_name":"女靴"},{"gc_id":"96","gc_name":"雪地靴"},{"gc_id":"97","gc_name":"拖鞋"},{"gc_id":"98","gc_name":"裸靴"},{"gc_id":"99","gc_name":"筒靴"},{"gc_id":"100","gc_name":"帆布鞋"},{"gc_id":"101","gc_name":"雨鞋/雨靴"},{"gc_id":"102","gc_name":"媽媽鞋"},{"gc_id":"103","gc_name":"鞋配件"},{"gc_id":"104","gc_name":"特色鞋"},{"gc_id":"105","gc_name":"魚嘴鞋"},{"gc_id":"106","gc_name":"布鞋/繡花鞋"}]},{"gc_id":"9","gc_name":"男鞋","child":[{"gc_id":"107","gc_name":"商務(wù)休閑鞋"},{"gc_id":"108","gc_name":"正裝鞋"},{"gc_id":"109","gc_name":"休閑鞋"},{"gc_id":"110","gc_name":"涼鞋/沙灘鞋"},{"gc_id":"111","gc_name":"男靴"},{"gc_id":"112","gc_name":"功能鞋"},{"gc_id":"113","gc_name":"拖鞋"},{"gc_id":"114","gc_name":"傳統(tǒng)布鞋"},{"gc_id":"115","gc_name":"鞋配件"},{"gc_id":"116","gc_name":"帆布鞋"},{"gc_id":"117","gc_name":"豆豆鞋"},{"gc_id":"118","gc_name":"駕車鞋"}]},{"gc_id":"10","gc_name":"配飾","child":[{"gc_id":"119","gc_name":"太陽鏡"},{"gc_id":"120","gc_name":"框鏡"},{"gc_id":"121","gc_name":"皮帶"},{"gc_id":"122","gc_name":"圍巾"},{"gc_id":"123","gc_name":"手套"},{"gc_id":"124","gc_name":"帽子"},{"gc_id":"125","gc_name":"領(lǐng)帶"},{"gc_id":"126","gc_name":"袖扣"},{"gc_id":"127","gc_name":"其他配件"},{"gc_id":"128","gc_name":"絲巾"},{"gc_id":"129","gc_name":"披肩"},{"gc_id":"130","gc_name":"腰帶"},{"gc_id":"131","gc_name":"腰鏈/腰封"},{"gc_id":"132","gc_name":"棒球帽"},{"gc_id":"133","gc_name":"毛線"},{"gc_id":"134","gc_name":"遮陽帽"},{"gc_id":"135","gc_name":"防紫外線手套"},{"gc_id":"136","gc_name":"草帽"}]},{"gc_id":"11","gc_name":"童裝","child":[{"gc_id":"137","gc_name":"套裝"},{"gc_id":"138","gc_name":"上衣"},{"gc_id":"139","gc_name":"褲子"},{"gc_id":"140","gc_name":"裙子"},{"gc_id":"141","gc_name":"內(nèi)衣/家居服"},{"gc_id":"142","gc_name":"羽絨服/棉服"},{"gc_id":"143","gc_name":"親子裝"},{"gc_id":"144","gc_name":"兒童配飾"},{"gc_id":"145","gc_name":"禮服/演出服"},{"gc_id":"146","gc_name":"運動鞋"},{"gc_id":"147","gc_name":"單鞋"},{"gc_id":"148","gc_name":"靴子"},{"gc_id":"149","gc_name":"涼鞋"},{"gc_id":"150","gc_name":"功能鞋"}]}]}
     */

    private int code;
    private DatasBean datas;

    public int getCode() {
        return code;
    }

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

    public DatasBean getDatas() {
        return datas;
    }

    public void setDatas(DatasBean datas) {
        this.datas = datas;
    }

    public static class DatasBean {
        private List<ClassListBean> class_list;

        public List<ClassListBean> getClass_list() {
            return class_list;
        }

        public void setClass_list(List<ClassListBean> class_list) {
            this.class_list = class_list;
        }

        public static class ClassListBean {
            /**
             * gc_id : 4
             * gc_name : 女裝
             * child : [{"gc_id":"12","gc_name":"T恤"},{"gc_id":"13","gc_name":"襯衫"},{"gc_id":"14","gc_name":"針織衫"},{"gc_id":"15","gc_name":"雪紡衫"},{"gc_id":"16","gc_name":"衛(wèi)衣"},{"gc_id":"17","gc_name":"馬甲"},{"gc_id":"18","gc_name":"連衣裙"},{"gc_id":"19","gc_name":"半身裙"},{"gc_id":"20","gc_name":"牛仔褲"},{"gc_id":"21","gc_name":"休閑褲"},{"gc_id":"22","gc_name":"打底褲"},{"gc_id":"23","gc_name":"正裝褲"},{"gc_id":"24","gc_name":"西服"},{"gc_id":"25","gc_name":"短外套"},{"gc_id":"26","gc_name":"風(fēng)衣"},{"gc_id":"27","gc_name":"大衣"},{"gc_id":"28","gc_name":"皮衣皮草"},{"gc_id":"29","gc_name":"棉服"},{"gc_id":"30","gc_name":"羽絨服"},{"gc_id":"31","gc_name":"孕婦裝"},{"gc_id":"32","gc_name":"大碼裝"},{"gc_id":"33","gc_name":"中老年裝"},{"gc_id":"34","gc_name":"婚紗禮服"},{"gc_id":"1053","gc_name":"女裝"}]
             */

            private String gc_id;
            private String gc_name;
            private List<ChildBean> child;

            public String getGc_id() {
                return gc_id;
            }

            public void setGc_id(String gc_id) {
                this.gc_id = gc_id;
            }

            public String getGc_name() {
                return gc_name;
            }

            public void setGc_name(String gc_name) {
                this.gc_name = gc_name;
            }

            public List<ChildBean> getChild() {
                return child;
            }

            public void setChild(List<ChildBean> child) {
                this.child = child;
            }

            public static class ChildBean {
                /**
                 * gc_id : 12
                 * gc_name : T恤
                 */

                private String gc_id;
                private String gc_name;

                public String getGc_id() {
                    return gc_id;
                }

                public void setGc_id(String gc_id) {
                    this.gc_id = gc_id;
                }

                public String getGc_name() {
                    return gc_name;
                }

                public void setGc_name(String gc_name) {
                    this.gc_name = gc_name;
                }
            }
        }
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末惯退,一起剝皮案震驚了整個濱河市本股,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌兔甘,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,270評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件隆敢,死亡現(xiàn)場離奇詭異晴竞,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)种呐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評論 3 395
  • 文/潘曉璐 我一進(jìn)店門宰翅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人爽室,你說我怎么就攤上這事汁讼。” “怎么了阔墩?”我有些...
    開封第一講書人閱讀 165,630評論 0 356
  • 文/不壞的土叔 我叫張陵嘿架,是天一觀的道長。 經(jīng)常有香客問我啸箫,道長耸彪,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,906評論 1 295
  • 正文 為了忘掉前任筐高,我火速辦了婚禮搜囱,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘柑土。我一直安慰自己蜀肘,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,928評論 6 392
  • 文/花漫 我一把揭開白布稽屏。 她就那樣靜靜地躺著扮宠,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上坛增,一...
    開封第一講書人閱讀 51,718評論 1 305
  • 那天获雕,我揣著相機(jī)與錄音,去河邊找鬼收捣。 笑死届案,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的罢艾。 我是一名探鬼主播楣颠,決...
    沈念sama閱讀 40,442評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼咐蚯!你這毒婦竟也來了童漩?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,345評論 0 276
  • 序言:老撾萬榮一對情侶失蹤春锋,失蹤者是張志新(化名)和其女友劉穎矫膨,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體期奔,經(jīng)...
    沈念sama閱讀 45,802評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡侧馅,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,984評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了能庆。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片施禾。...
    茶點故事閱讀 40,117評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡脚线,死狀恐怖搁胆,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情邮绿,我是刑警寧澤渠旁,帶...
    沈念sama閱讀 35,810評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站船逮,受9級特大地震影響顾腊,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜挖胃,卻給世界環(huán)境...
    茶點故事閱讀 41,462評論 3 331
  • 文/蒙蒙 一杂靶、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧酱鸭,春花似錦吗垮、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至蔚舀,卻和暖如春饵沧,著一層夾襖步出監(jiān)牢的瞬間锨络,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評論 1 272
  • 我被黑心中介騙來泰國打工狼牺, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留羡儿,地道東北人。 一個月前我還...
    沈念sama閱讀 48,377評論 3 373
  • 正文 我出身青樓是钥,卻偏偏與公主長得像失受,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子咏瑟,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,060評論 2 355

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,181評論 25 707
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理拂到,服務(wù)發(fā)現(xiàn),斷路器码泞,智...
    卡卡羅2017閱讀 134,665評論 18 139
  • Tangram是阿里出品兄旬、用于快速實現(xiàn)組合布局的框架模型,在手機(jī)天貓Android&iOS版 內(nèi)廣泛使用 該框架提...
    wintersweett閱讀 3,302評論 0 1
  • Java中的String類可以被繼承么余寥? 答:不能领铐,因為它是一個final類,同樣的還有Integer宋舷,F(xiàn)loat...
    gyymz1993閱讀 3,991評論 2 104
  • 我誰 ## 恩
    愛Fenng閱讀 156評論 0 0