drawable【这是两张图片】

xml

  • activity_second
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical">    <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="40dp">        <CheckBox            android:id="@+id/cb"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_centerVertical="true"            android:text="全选" />        <TextView            android:id="@+id/tvTotal"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_centerVertical="true"            android:layout_marginLeft="15dp"            android:layout_toRightOf="@id/cb"            android:text="合计:" />        <TextView            android:id="@+id/tvCount"            android:layout_width="100dp"            android:layout_height="match_parent"            android:layout_alignParentRight="true"            android:layout_centerVertical="true"            android:background="#ff0000"            android:gravity="center"            android:text="去结算(0)"            android:textColor="#ffffff" />    RelativeLayout>LinearLayout>
  • elv_child
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="120dp"    android:descendantFocusability="blocksDescendants"    android:gravity="center_vertical"    android:orientation="horizontal"    android:paddingLeft="50dp">    <CheckBox        android:id="@+id/cbChild"        android:layout_width="wrap_content"        android:layout_height="wrap_content" />    <ImageView        android:id="@+id/iv"        android:layout_width="100dp"        android:layout_height="100dp" />    <LinearLayout        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:layout_weight="1"        android:orientation="vertical">        <TextView            android:id="@+id/tvTitle"            android:layout_width="wrap_content"            android:layout_height="wrap_content" />        <TextView            android:id="@+id/tvSubhead"            android:layout_width="wrap_content"            android:layout_height="wrap_content" />        <LinearLayout            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:gravity="center_vertical"            android:orientation="horizontal">            <TextView                android:id="@+id/tvPrice"                android:layout_width="wrap_content"                android:layout_height="wrap_content" />            <ImageView                android:layout_marginLeft="10dp"                android:id="@+id/ivDel"                android:layout_width="25dp"                android:layout_height="25dp"                android:background="@drawable/iv_del" />            <TextView                android:id="@+id/tvNum"                android:layout_width="wrap_content"                android:layout_height="wrap_content"                android:textSize="25sp"                android:layout_marginLeft="3dp"                android:layout_marginRight="3dp"                android:text="1"/>            <ImageView                android:id="@+id/ivAdd"                android:layout_width="25dp"                android:layout_height="25dp"                android:background="@drawable/iv_add" />        LinearLayout>    LinearLayout>    <Button        android:id="@+id/btDel"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="删除" />LinearLayout>
  • elv_group
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:gravity="center_vertical"    android:orientation="horizontal">    <CheckBox        android:id="@+id/cbGroup"        android:layout_width="wrap_content"        android:layout_height="wrap_content" />    <TextView        android:id="@+id/tvGroup"        android:layout_width="match_parent"        android:layout_height="40dp"        android:gravity="center_vertical" />LinearLayout>

veiw层

  • ISecondListener
public interface ISecondListener {    void show(List group, List> child);}
  • SecondActivity
public class SecondActivity extends AppCompatActivity implements ISecondListener {    private GetCartPresenter getCartPresenter;    private ExpandableListView mElv;    private CheckBox mCb;    private TextView mTvTotal;    private TextView mTvCount;    private ElvAdapter elvAdapter;    private PriceAndCount priceAndCount;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_second);        initView();        getCartPresenter = new GetCartPresenter(this);        getCartPresenter.getCart();        mCb.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                elvAdapter.AllOrNone(mCb.isChecked());            }        });    }    @Override    protected void onDestroy() {        super.onDestroy();        getCartPresenter.dettach();    }    @Override    public void show(List group, List> child) {        elvAdapter = new ElvAdapter(this, group, child);        mElv.setGroupIndicator(null);        mElv.setAdapter(elvAdapter);        for (int i = 0; i < group.size(); i++) {            mElv.expandGroup(i);        }    }    private void initView() {        mElv = (ExpandableListView) findViewById(R.id.elv);        mCb = (CheckBox) findViewById(R.id.cb);        mTvTotal = (TextView) findViewById(R.id.tvTotal);        mTvCount = (TextView) findViewById(R.id.tvCount);        mTvCount.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                //跳转到确认订单页面                Intent intent = new Intent(SecondActivity.this, ConfirmActivity.class);                if (priceAndCount != null) {                    intent.putExtra("money", priceAndCount.getPrice() + "");                }                startActivity(intent);            }        });    }    public void setPriceAndCount(PriceAndCount priceAndCount) {        this.priceAndCount = priceAndCount;        mTvTotal.setText("合计:" + priceAndCount.getPrice());        mTvCount.setText("去结算(" + priceAndCount.getCount() + ")");    }    public void setAllChecked(boolean bool) {        mCb.setChecked(bool);    }

presenter

  • GetCartPresenter
public class GetCartPresenter {    private ISecondListener iSecondListener;    private final GetCartService getCartService;    public GetCartPresenter(ISecondListener iSecondListener) {        this.iSecondListener = iSecondListener;        getCartService = new GetCartModel();    }    public void dettach() {        iSecondListener = null;    }    public void getCart() {        Map params = new HashMap<>();        params.put("uid", "100");        params.put("pid", "71");        getCartService.getCart(params, new OnNetListener() {            @Override            public void onSuccess(GetCartBean getCartBean) {                if (iSecondListener != null) {                    List group = getCartBean.getData();                    List> child = new ArrayList<>();                    for (int i = 0; i < group.size(); i++) {                        child.add(group.get(i).getList());                    }                    iSecondListener.show(group, child);                }            }            @Override            public void onFailure(Exception e) {            }        });    }}

model

  • GetCartService
public interface GetCartService {    void getCart(Map params, OnNetListener onNetListener);}
  • GetCartModel
public class GetCartModel implements GetCartService {    private Handler handler = new Handler(Looper.getMainLooper());    @Override    public void getCart(Map params, final OnNetListener onNetListener) {        OkHttpUtils.getOkHttpUtils().doPost(Api.str2, params, new Callback() {            @Override            public void onFailure(Call call, IOException e) {            }            @Override            public void onResponse(Call call, Response response) throws IOException {                String string = response.body().string();                final GetCartBean getCartBean = new Gson().fromJson(string, GetCartBean.class);                handler.post(new Runnable() {                    @Override                    public void run() {                        onNetListener.onSuccess(getCartBean);                    }                });            }        });    }}

adapter

  • ElvAdapter
public class ElvAdapter extends BaseExpandableListAdapter {    private Context context;    private List group;    private List> child;    private final LayoutInflater inflater;    public ElvAdapter(Context context, List group, List> child) {        this.context = context;        this.group = group;        this.child = child;        inflater = LayoutInflater.from(context);    }    @Override    public int getGroupCount() {        return group.size();    }    @Override    public int getChildrenCount(int groupPosition) {        return child.get(groupPosition).size();    }    @Override    public Object getGroup(int groupPosition) {        return group.get(groupPosition);    }    @Override    public Object getChild(int groupPosition, int childPosition) {        return child.get(groupPosition).get(childPosition);    }    @Override    public long getGroupId(int groupPosition) {        return groupPosition;    }    @Override    public long getChildId(int groupPosition, int childPosition) {        return childPosition;    }    @Override    public boolean hasStableIds() {        return false;    }    @Override    public View getGroupView(final int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {        View view;        final GroupViewHolder holder;        if (convertView == null) {            view = inflater.inflate(R.layout.elv_group, null);            holder = new GroupViewHolder();            holder.tv = view.findViewById(R.id.tvGroup);            holder.cbGroup = view.findViewById(R.id.cbGroup);            view.setTag(holder);        } else {            view = convertView;            holder = (GroupViewHolder) view.getTag();        }        final GetCartBean.DataBean dataBean = group.get(groupPosition);        holder.tv.setText(dataBean.getSellerName());        holder.cbGroup.setChecked(dataBean.isChecked());        holder.cbGroup.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                //需要改变三个checkbox的状态值                //1.一级列表的checkbox状态值                dataBean.setChecked(holder.cbGroup.isChecked());                //2.二级列表的checkbox状态值                setChildrenCb(groupPosition, holder.cbGroup.isChecked());                //3.全选的checkbox状态值                ((SecondActivity) context).setAllChecked(isAllGroupCbChecked());                //计算钱和数量并显示                setPriceAndCount();                //刷新界面                notifyDataSetChanged();            }        });        return view;    }    @Override    public View getChildView(final int groupPosition, final int childPosition, boolean isLastChild, final View convertView, ViewGroup parent) {        View view;        final ChildViewHolder holder;        if (convertView == null) {            view = inflater.inflate(R.layout.elv_child, null);            holder = new ChildViewHolder();            holder.iv = view.findViewById(R.id.iv);            holder.tvTitle = view.findViewById(R.id.tvTitle);            holder.tvSubhead = view.findViewById(R.id.tvSubhead);            holder.tvPrice = view.findViewById(R.id.tvPrice);            holder.cbChild = view.findViewById(R.id.cbChild);            holder.btDel = view.findViewById(R.id.btDel);            holder.tvNum = view.findViewById(R.id.tvNum);            holder.ivDel = view.findViewById(R.id.ivDel);            holder.ivAdd = view.findViewById(R.id.ivAdd);            view.setTag(holder);        } else {            view = convertView;            holder = (ChildViewHolder) view.getTag();        }        final GetCartBean.DataBean.ListBean listBean = child.get(groupPosition).get(childPosition);        String images = listBean.getImages();        Glide.with(context).load(images.split("\\|")[0]).into(holder.iv);        holder.tvTitle.setText(listBean.getTitle());        holder.cbChild.setChecked(child.get(groupPosition).get(childPosition).isChecked());        holder.tvSubhead.setText(listBean.getSubhead());        holder.tvPrice.setText(listBean.getPrice() + "元");        holder.tvNum.setText(listBean.getCount() + "");        //给checkbox设置点击事件        holder.cbChild.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                //需要改变三个checkbox的状态值                //1.二级列表的checkbox状态值                listBean.setChecked(holder.cbChild.isChecked());                //2.一级列表的checkbox状态值                group.get(groupPosition).setChecked(isAllChildCbChecked(groupPosition));                //3.全选的checkbox状态值                ((SecondActivity) context).setAllChecked(isAllGroupCbChecked());                //计算钱和数量并显示                setPriceAndCount();                //刷新界面                notifyDataSetChanged();            }        });        holder.ivAdd.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                //获取目前显示的值                int count = listBean.getCount();                count++;                //改变JavaBean里的状态值                listBean.setCount(count);                //计算钱和数量并显示                setPriceAndCount();                //刷新列表                notifyDataSetChanged();            }        });        holder.ivDel.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                //获取目前显示的值                int count = listBean.getCount();                if (count <= 1) {                    count = 1;                } else {                    count--;                }                //改变JavaBean里的状态值                listBean.setCount(count);                //计算钱和数量并显示                setPriceAndCount();                //刷新列表                notifyDataSetChanged();            }        });        holder.btDel.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                //其实就是删除集合                List listBeans = child.get(groupPosition);                if (listBeans.size() > 0) {                    listBeans.remove(childPosition);                }                if (listBeans.size() == 0) {                    child.remove(groupPosition);                    group.remove(groupPosition);                }                //计算钱和数量并显示                setPriceAndCount();                //改变全选状态                ((SecondActivity) context).setAllChecked(isAllGroupCbChecked());                //刷新列表                notifyDataSetChanged();            }        });        return view;    }    @Override    public boolean isChildSelectable(int groupPosition, int childPosition) {        return false;    }    class GroupViewHolder {        TextView tv;        CheckBox cbGroup;    }    class ChildViewHolder {        ImageView iv;        TextView tvTitle;        TextView tvSubhead;        TextView tvPrice;        CheckBox cbChild;        Button btDel;        TextView tvNum;        ImageView ivDel;        ImageView ivAdd;    }    /**     * 设置一级列表对应的二级列表checkbox状态     */    private void setChildrenCb(int groupPosition, boolean bool) {        List listBeans = child.get(groupPosition);        for (int i = 0; i < listBeans.size(); i++) {            listBeans.get(i).setChecked(bool);        }    }    /**     * 判断一级列表checkbox状态     */    private boolean isAllGroupCbChecked() {        if (group.size() == 0) {            return false;        }        for (int i = 0; i < group.size(); i++) {            if (!group.get(i).isChecked()) {                return false;            }        }        return true;    }    /**     * 判断二级列表checkbox状态     */    private boolean isAllChildCbChecked(int groupPosition) {        List listBeans = child.get(groupPosition);        for (int i = 0; i < listBeans.size(); i++) {            if (!listBeans.get(i).isChecked()) {                return false;            }        }        return true;    }    /**     * 设置钱和数量     */    private void setPriceAndCount() {        ((SecondActivity) context).setPriceAndCount(compute());    }    /**     * 计算钱和数量     */    private PriceAndCount compute() {        double price = 0;        int count = 0;        for (int i = 0; i < group.size(); i++) {            List listBeans = child.get(i);            for (int j = 0; j < listBeans.size(); j++) {                if (listBeans.get(j).isChecked()) {                    price += listBeans.get(j).getPrice() * listBeans.get(j).getCount();                    count += listBeans.get(j).getCount();                }            }        }        return new PriceAndCount(price, count);    }    /**     * 全选或者全不选     */    public void AllOrNone(boolean bool) {        for (int i = 0; i < group.size(); i++) {            group.get(i).setChecked(bool);            setChildrenCb(i, bool);        }        setPriceAndCount();        notifyDataSetChanged();    }}

bean包

  • GetCartBean
public class GetCartBean {    private String msg;    private String code;    private List data;    public String getMsg() {        return msg;    }    public void setMsg(String msg) {        this.msg = msg;    }    public String getCode() {        return code;    }    public void setCode(String code) {        this.code = code;    }    public List getData() {        return data;    }    public void setData(List data) {        this.data = data;    }    public static class DataBean {        private boolean checked;        private String sellerName;        private String sellerid;        private List list;        public boolean isChecked() {            return checked;        }        public void setChecked(boolean checked) {            this.checked = checked;        }        public String getSellerName() {            return sellerName;        }        public void setSellerName(String sellerName) {            this.sellerName = sellerName;        }        public String getSellerid() {            return sellerid;        }        public void setSellerid(String sellerid) {            this.sellerid = sellerid;        }        public List getList() {            return list;        }        public void setList(List list) {            this.list = list;        }        public static class ListBean {            private boolean checked;            private int count = 1;            private double bargainPrice;            private String createtime;            private String detailUrl;            private String images;            private int num;            private int pid;            private double price;            private int pscid;            private int selected;            private int sellerid;            private String subhead;            private String title;            public boolean isChecked() {                return checked;            }            public void setChecked(boolean checked) {                this.checked = checked;            }            public int getCount() {                return count;            }            public void setCount(int count) {                this.count = count;            }            public double getBargainPrice() {                return bargainPrice;            }            public void setBargainPrice(double bargainPrice) {                this.bargainPrice = bargainPrice;            }            public String getCreatetime() {                return createtime;            }            public void setCreatetime(String createtime) {                this.createtime = createtime;            }            public String getDetailUrl() {                return detailUrl;            }            public void setDetailUrl(String detailUrl) {                this.detailUrl = detailUrl;            }            public String getImages() {                return images;            }            public void setImages(String images) {                this.images = images;            }            public int getNum() {                return num;            }            public void setNum(int num) {                this.num = num;            }            public int getPid() {                return pid;            }            public void setPid(int pid) {                this.pid = pid;            }            public double getPrice() {                return price;            }            public void setPrice(double price) {                this.price = price;            }            public int getPscid() {                return pscid;            }            public void setPscid(int pscid) {                this.pscid = pscid;            }            public int getSelected() {                return selected;            }            public void setSelected(int selected) {                this.selected = selected;            }            public int getSellerid() {                return sellerid;            }            public void setSellerid(int sellerid) {                this.sellerid = sellerid;            }            public String getSubhead() {                return subhead;            }            public void setSubhead(String subhead) {                this.subhead = subhead;            }            public String getTitle() {                return title;            }            public void setTitle(String title) {                this.title = title;            }        }    }}
  • PriceAndCount
public class PriceAndCount {    private double price;    private int count;    public PriceAndCount(double price, int count) {        this.price = price;        this.count = count;    }    public double getPrice() {        return price;    }    public void setPrice(double price) {        this.price = price;    }    public int getCount() {        return count;    }    public void setCount(int count) {        this.count = count;    }

更多相关文章

  1. android 隐藏状态栏和导航栏
  2. android wifi状态更新
  3. Android(安卓)Intent列表
  4. android 飞行模式 注册广播后 三种状态监听
  5. android GPS定位和卫星个数(源码)
  6. android 设置状态栏全透明,背景延伸到状态栏
  7. android添加监听器
  8. android TelephonyManager
  9. Android(安卓)判断是都联网状态

随机推荐

  1. 12、android socket使用demo:网络聊天
  2. Android在应用程序中调用相机程序
  3. Android M(6.0)扫描不到蓝牙设备的处理办法
  4. 5. android 列表视图
  5. Android自定义view七时间轴(二)---横向的图
  6. 关于android录音权限被用户禁用的问题解
  7. android 拍照,图片裁剪,选择图片
  8. animation1
  9. 获取Android各类系统相关信息的接口实现
  10. 隐藏 video标签的下载按钮