--------------------------------MainActivity---------------------------------------------

package com.baway.twoshopcar;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;import org.greenrobot.eventbus.EventBus;import org.greenrobot.eventbus.Subscribe;import java.util.ArrayList;import java.util.List;public class MainActivity extends AppCompatActivity implements View.OnClickListener {    /**     * 全选     */    private CheckBox mCbAll;    /**     * 22     */    private TextView mTotalPrice;    /**     * 22     */    private TextView mTotalNum;    private ExpandableListView mElv;    private List groupList = new ArrayList<>();    private List> childList = new ArrayList<>();    private MyAdapter adapter;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        EventBus.getDefault().register(this);        initView();        initDate();        mElv.setGroupIndicator(null);        adapter = new MyAdapter(this, groupList, childList);        mElv.setAdapter(adapter);        for (int i = 0; i <groupList.size() ; i++) {            mElv.expandGroup(i);        }    }    @Subscribe    public void moneyCount(MCEvent mcEvent){        int money = mcEvent.getMoney();        int count = mcEvent.getCount();        mTotalNum.setText(count+"");        mTotalPrice.setText(money+"");    }    @Subscribe    public void messageEvent(MsgEvent msg) {        mCbAll.setChecked(msg.isFlag());    }    @Override    protected void onDestroy() {        super.onDestroy();        EventBus.getDefault().unregister(this);    }    private void initDate() {        for (int i = 0; i < 3; i++) {            GroupBean groupBean = new GroupBean(false, "商家" + i);            groupList.add(groupBean);            List list = new ArrayList<>();            for (int j = 0; j < 2; j++) {                ChildBean childBean = new ChildBean("商品" + i, 1 + i, 1,false);                list.add(childBean);            }            childList.add(list);        }    }    private void initView() {        mCbAll = (CheckBox) findViewById(R.id.cb_all);        mCbAll.setOnClickListener(this);        mTotalPrice = (TextView) findViewById(R.id.totalPrice);        mTotalNum = (TextView) findViewById(R.id.totalNum);        mElv = (ExpandableListView) findViewById(R.id.elv);    }    @Override    public void onClick(View v) {        switch (v.getId()) {            case R.id.cb_all:                adapter.allChecked(mCbAll.isChecked());                break;        }    }}
-----------------------------------MyAdapter-----------------------------------------------------------------------

package com.baway.twoshopcar;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 org.greenrobot.eventbus.EventBus;import java.util.List;/** * Created by yz on 2017/10/24. */public class MyAdapter extends BaseExpandableListAdapter {    private Context context;    private List groupList;    private List> childList;    private int count;    private int sumMoney;    public MyAdapter(Context context, List groupList, List> childList) {        this.context = context;        this.groupList = groupList;        this.childList = childList;    }    @Override    public int getGroupCount() {        return groupList.size();    }    @Override    public int getChildrenCount(int groupPosition) {        return childList.get(groupPosition).size();    }    @Override    public Object getGroup(int groupPosition) {        return groupList.get(groupPosition);    }    @Override    public Object getChild(int groupPosition, int childPosition) {        return childList.get(groupPosition).get(childPosition);    }    @Override    public long getGroupId(int groupPosition) {        return groupPosition;    }    @Override    public long getChildId(int groupPosition, int childPosition) {        return childPosition;    }    @Override    public boolean hasStableIds() {        return false;    }    @Override    public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {        GroupViewHolder holder;        if (convertView == null) {            holder = new GroupViewHolder();            convertView = View.inflate(context, R.layout.groupitem, null);            holder.cb = convertView.findViewById(R.id.cb);            holder.tvName = convertView.findViewById(R.id.tvName);            convertView.setTag(holder);        } else {            holder = (GroupViewHolder) convertView.getTag();        }        //赋值        GroupBean groupBean = groupList.get(groupPosition);        holder.cb.setChecked(groupBean.isChecked());        holder.tvName.setText(groupBean.getGroupName());        //给group设置点击事件        holder.cb.setOnClickListener(new GroupCbOnClickListener(groupPosition));        return convertView;    }    @Override    public View getChildView(final int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {        final ChildViewHolder holder;        if (convertView == null) {            holder = new ChildViewHolder();            convertView = View.inflate(context, R.layout.childitem, null);            holder.cb = convertView.findViewById(R.id.cb);            holder.tvName = convertView.findViewById(R.id.tvName);            holder.tvPrice = convertView.findViewById(R.id.tvPrice);            holder.adv = convertView.findViewById(R.id.adv);            convertView.setTag(holder);        } else {            holder = (ChildViewHolder) convertView.getTag();        }        //赋值        final ChildBean childBean = childList.get(groupPosition).get(childPosition);        holder.cb.setChecked(childBean.isChecked());        holder.tvName.setText(childBean.getChildName());        holder.tvPrice.setText(childBean.getPrice() + "");        //设置点击事件Child        holder.cb.setOnClickListener(new ChildCbOnClickListener(groupPosition, childPosition));        /**         * 设置加减器的代码监听事件         */        holder.adv.setOnAddClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                String countStr = holder.adv.getCount();                int count = Integer.parseInt(countStr);                holder.adv.setCount(++count + "");                childBean.setCount(count);                //发送数量和价钱                childBean.setChecked(true);                //判断该商家的所有商品的checkbox是否都选中                if (isChildChecked(childList.get(groupPosition))) {                    groupList.get(groupPosition).setChecked(true);                    MsgEvent msgEvent = new MsgEvent();                    msgEvent.setFlag(isGroupChecked());                    EventBus.getDefault().post(msgEvent);                    notifyDataSetChanged();                } else {                    groupList.get(groupPosition).setChecked(false);                    MsgEvent msgEvent = new MsgEvent();                    msgEvent.setFlag(false);                    EventBus.getDefault().post(msgEvent);                    notifyDataSetChanged();                    notifyDataSetChanged();                }                //计算选中的商品数,并发送到猪界面进行显示                MCEvent mcEvent = new MCEvent();                mcEvent.setCount(totalCount());                mcEvent.setMoney(totalPrice());                EventBus.getDefault().post(mcEvent);            }        });        /**         * 设置加减器的代码监听事件         */        holder.adv.setOnDelClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                String countStr = holder.adv.getCount();                int count = Integer.parseInt(countStr);                count = --count < 1 ? 1 : count;                holder.adv.setCount(count + "");                childBean.setCount(count);                if (count > 1) {                    childBean.setChecked(true);                }                //判断该商家的所有商品的checkbox是否都选中                if (isChildChecked(childList.get(groupPosition))){                    groupList.get(groupPosition).setChecked(true);                    MsgEvent msgEvent = new MsgEvent();                    msgEvent.setFlag(isGroupChecked());                    EventBus.getDefault().post(msgEvent);                    notifyDataSetChanged();                }else{                    groupList.get(groupPosition).setChecked(false);                    MsgEvent msgEvent = new MsgEvent();                    msgEvent.setFlag(false);                    EventBus.getDefault().post(msgEvent);                    notifyDataSetChanged();                    notifyDataSetChanged();                }                //计算选中的商品数,并发送到主界面                MCEvent mcEvent = new MCEvent();                mcEvent.setCount(totalCount());                mcEvent.setMoney(totalPrice());                EventBus.getDefault().post(mcEvent);            }        });        return convertView;    }    @Override    public boolean isChildSelectable(int groupPosition, int childPosition) {        return true;    }    class GroupViewHolder {        CheckBox cb;        TextView tvName;    }    class ChildViewHolder {        CheckBox cb;        TextView tvName;        TextView tvPrice;        MyAddDelView adv;    }    class ChildCbOnClickListener implements View.OnClickListener {        private int groupPosition;        private int childPosition;        public ChildCbOnClickListener(int groupPosition, int childPosition) {            this.groupPosition = groupPosition;            this.childPosition = childPosition;        }        @Override        public void onClick(View v) {            if (v instanceof CheckBox) {                CheckBox cb = (CheckBox) v;                List childBeen = childList.get(groupPosition);                ChildBean childBean = childBeen.get(childPosition);                childBean.setChecked(cb.isChecked());                //计算选中的商品数,并发送到主界面进行显示                MCEvent mcEvent = new MCEvent();                mcEvent.setCount(totalCount());                mcEvent.setMoney(totalPrice());                EventBus.getDefault().post(mcEvent);                //判断商家所有的商品的checkbox是否选中                if (isChildChecked(childBeen)) {                    groupList.get(groupPosition).setChecked(true);                    MsgEvent msgEvent = new MsgEvent();                    msgEvent.setFlag(isGroupChecked());                    EventBus.getDefault().post(msgEvent);                    notifyDataSetChanged();                } else {                    groupList.get(groupPosition).setChecked(false);                    MsgEvent msgEvent = new MsgEvent();                    msgEvent.setFlag(false);                    msgEvent.setFlag(isGroupChecked());                    EventBus.getDefault().post(msgEvent);                    notifyDataSetChanged();                }            }        }    }    /**     * 判断所有商家的所有商品的checkbox是否都选中     *     * @param childBean     * @return     */    private boolean isChildChecked(List childBean) {        for (int i = 0; i < childBean.size(); i++) {            ChildBean childBean1 = childBean.get(i);            if (!childBean1.isChecked()) {                return false;            }        }        return true;    }    //父级列表的点击事件    class GroupCbOnClickListener implements View.OnClickListener {        private int groupPosition;        public GroupCbOnClickListener(int groupPosition) {            this.groupPosition = groupPosition;        }        @Override        public void onClick(View v) {            if (v instanceof CheckBox) {                CheckBox cb = (CheckBox) v;                //根据cb.isChecked()是否选中,给一级列的checkbox改变状态                groupList.get(groupPosition).setChecked(cb.isChecked());                List childBeenList = childList.get(groupPosition);                for (ChildBean childBean : childBeenList) {                    childBean.setChecked(cb.isChecked());                }                //计算选中的商品数和金额,并发送到主界面进行显示                MCEvent mcEvent = new MCEvent();                mcEvent.setCount(totalCount());                mcEvent.setMoney(totalPrice());                EventBus.getDefault().post(mcEvent);                MsgEvent msgEvent = new MsgEvent();                msgEvent.setFlag(isGroupChecked());                EventBus.getDefault().post(msgEvent);                notifyDataSetChanged();            }        }    }    /**     * 判断其他商家是否选中     *     * @return     */    private boolean isGroupChecked() {        for (GroupBean groupBean : groupList) {            if (!groupBean.isChecked()) {                return false;            }        }        return true;    }    /**     * 主界面全选按钮的操作     *     * @param bool     */    public void allChecked(boolean bool) {        for (int i = 0; i < groupList.size(); i++) {            groupList.get(i).setChecked(bool);            for (int j = 0; j < childList.get(i).size(); j++) {                childList.get(i).get(j).setChecked(bool);            }        }        //计算选中的商品数,发送到主界面进行显示        MCEvent mcEvent = new MCEvent();        mcEvent.setCount(totalCount());        mcEvent.setMoney(totalPrice());        EventBus.getDefault().post(mcEvent);        notifyDataSetChanged();    }    /**     * 计算商品总价格     *     * @return     */    private int totalPrice() {        sumMoney = 0;        for (int i = 0; i < groupList.size(); i++) {            for (int j = 0; j < childList.get(i).size(); j++) {                if (childList.get(i).get(j).isChecked()) {                    int count = childList.get(i).get(j).getCount();                    int price = childList.get(i).get(j).getPrice();                    sumMoney += count * price;                }            }        }        return sumMoney;    }    /**     * 计算商品的总数量     *     * @return     */    private int totalCount() {        count = 0;        for (int i = 0; i < groupList.size(); i++) {            for (int j = 0; j < childList.get(i).size(); j++) {                if (childList.get(i).get(j).isChecked()) {                    //遍历所有商品,只要是选中状态的,就加1                    count += childList.get(i).get(j).getCount();                }            }        }        return count;    }}
-----------------------------------------自定义View类--------------------------------------------------

package com.baway.twoshopcar;import android.content.Context;import android.support.annotation.Nullable;import android.util.AttributeSet;import android.view.LayoutInflater;import android.widget.LinearLayout;import android.widget.TextView;/** * Created by yz on 2017/10/25. */public class MyAddDelView extends LinearLayout {    private TextView num;    private OnItemClick onItemClick;    private TextView add;    private TextView del;    public interface OnItemClick {        public void onItemAddClick(int count);        public void onItemDelClick(int count);    }    public void setOnItemClick(OnItemClick onItemClick) {        this.onItemClick = onItemClick;    }    public MyAddDelView(Context context) {        this(context, null);    }    public MyAddDelView(final Context context, @Nullable AttributeSet attrs) {        super(context, attrs);        LayoutInflater.from(context).inflate(R.layout.jia_jian_item, this);        add = findViewById(R.id.add);        del = findViewById(R.id.del);        num = findViewById(R.id.num);    }    public void setOnAddClickListener(OnClickListener onClickListener) {        add.setOnClickListener(onClickListener);    }    public void setOnDelClickListener(OnClickListener onClickListener) {        del.setOnClickListener(onClickListener);    }    public void setCount(String count) {        num.setText(count);    }    public String getCount(){        return num.getText().toString().trim();    }}

--------------------------------------------ChildBean------------------------------------------

package com.baway.twoshopcar;/** * Created by yz on 2017/10/24. */public class ChildBean {    private String childName;    private int price;    private int count;    private boolean checked;    public ChildBean(String childName, int price, int count, boolean checked) {        this.childName = childName;        this.price = price;        this.count = count;        this.checked = checked;    }    public String getChildName() {        return childName;    }    public void setChildName(String childName) {        this.childName = childName;    }    public int getPrice() {        return price;    }    public void setPrice(int price) {        this.price = price;    }    public int getCount() {        return count;    }    public void setCount(int count) {        this.count = count;    }    public boolean isChecked() {        return checked;    }    public void setChecked(boolean checked) {        this.checked = checked;    }}
------------------------------GroupBean---------------------------------------

package com.baway.twoshopcar;/** * Created by yz on 2017/10/24. */public class GroupBean {    private boolean checked;    private String groupName;    public GroupBean(boolean checked, String groupName) {        this.checked = checked;        this.groupName = groupName;    }    public boolean isChecked() {        return checked;    }    public void setChecked(boolean checked) {        this.checked = checked;    }    public String getGroupName() {        return groupName;    }    public void setGroupName(String groupName) {        this.groupName = groupName;    }}
---------------------MCEvent-----------------------------------
   
package com.baway.twoshopcar;/** * Created by hhhh on 2017/10/24. */public class MCEvent {    private int money;    private int count;    public int getMoney() {        return money;    }    public void setMoney(int money) {        this.money = money;    }    public int getCount() {        return count;    }    public void setCount(int count) {        this.count = count;    }}

-----------------------------MsgEvent-----------------------------------------------

package com.baway.twoshopcar;/** * Created by hhh on 2017/10/24. */public class MsgEvent {    private boolean flag;    public boolean isFlag() {        return flag;    }    public void setFlag(boolean flag) {        this.flag = flag;    }}

----------------------------MainActivity布局文件---------------------------------------------

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    tools:context="com.baway.twoshopcar.MainActivity">    <LinearLayout        android:id="@+id/ll"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:layout_alignParentBottom="true"        android:orientation="horizontal">        <CheckBox            android:id="@+id/cb_all"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_gravity="center_vertical"            android:text="全选" />        <TextView            android:layout_width="wrap_content"            android:layout_height="match_parent"            android:layout_marginLeft="20dp"            android:gravity="center_vertical"            android:text="合计:" />        <TextView            android:id="@+id/totalPrice"            android:layout_width="wrap_content"            android:layout_height="match_parent"            android:layout_marginLeft="10dp"            android:gravity="center_vertical"            android:text="22" />        <TextView            android:layout_width="wrap_content"            android:layout_height="match_parent"            android:layout_marginLeft="30dp"            android:gravity="center_vertical"            android:text="数量" />        <TextView            android:id="@+id/totalNum"            android:layout_width="wrap_content"            android:layout_height="match_parent"            android:layout_marginLeft="10dp"            android:gravity="center_vertical"            android:text="22" />    LinearLayout>    <ExpandableListView        android:id="@+id/elv"        android:layout_above="@id/ll"        android:layout_width="match_parent"        android:layout_height="match_parent">ExpandableListView>RelativeLayout>

---------------------------------------ChildItem布局文件------------------------------------------

<?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="40dp"    android:background="#330000ff"    android:gravity="center_vertical"    android:orientation="horizontal"    android:paddingLeft="20dp">    <CheckBox        android:id="@+id/cb"        android:layout_width="wrap_content"        android:layout_height="wrap_content" />    <TextView        android:id="@+id/tvName"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_marginLeft="5dp" />    <TextView        android:id="@+id/tvPrice"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_marginLeft="60dp" />    <com.baway.twoshopcar.MyAddDelView        android:layout_marginLeft="100dp"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:id="@+id/adv">com.baway.twoshopcar.MyAddDelView>LinearLayout>
---------------------------------GroupItem布局文件---------------------------------------------

<?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="40dp"    android:background="#330000ff"    android:gravity="center_vertical"    android:orientation="horizontal">    <CheckBox        android:id="@+id/cb"        android:layout_width="wrap_content"        android:layout_height="wrap_content" />    <TextView        android:id="@+id/tvName"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_marginLeft="5dp" />LinearLayout>

--------------------------------------------加减器布局文件-------------------------------

<?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">    <TextView        android:layout_width="20dp"        android:layout_height="20dp"        android:id="@+id/del"        android:gravity="center"        android:background="@drawable/circle_shape"        android:text="-"/>    <TextView        android:layout_width="40dp"        android:layout_height="20dp"        android:id="@+id/num"        android:layout_marginLeft="5dp"        android:layout_marginRight="5dp"        android:background="@drawable/circle_shape"        android:gravity="center"        android:text="1"/>    <TextView        android:id="@+id/add"        android:layout_width="20dp"        android:layout_height="20dp"        android:gravity="center"        android:background="@drawable/circle_shape"        android:text="+"/>LinearLayout>

---------------------------------------Drawable文件circle_shape-------------------------------------------------

<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android"    android:shape="rectangle">    <stroke        android:width="2dp"        android:color="#33000000">stroke>    <corners android:radius="100dp">corners>shape>



更多相关文章

  1. Android提高十八篇之自定义Menu(TabMenu)[转]
  2. 最新最全的Android计算器开发教程
  3. Android中getWidth和getMeasuredWidth的区别
  4. Android(安卓)UI开发: 横向ListView(HorizontalListView)及一个
  5. Android中如何取消listview的点击效果
  6. Python3原生编写月份计算工具
  7. Android颜色透明度(不透明度)计算
  8. Android用GridLayout网格布局实现简单的计算器界面
  9. Android开发——实现Android简易计算器

随机推荐

  1. EditText的属性
  2. Android(安卓)Talker(3)Go on with the R
  3. 利用 nodejs 自动生成 Android(安卓)语言
  4. ant 打包android应用
  5. Android中有关Handler的使用(三)
  6. Weex list复用(三)
  7. TTS源码解析
  8. Android(安卓)近百个项目的源代码,覆盖And
  9. 给作为安卓开发新手的自己的几点建议(摘抄
  10. android平台上的文件下载,文件和文件的操