Android怎么实现二级列表购物车功能

发布时间:2021-04-16 12:45:40

来源:亿速云

阅读:61

作者:小新

小编给大家分享一下Android怎么实现二级列表购物车功能,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!

具体内容如下

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

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

GroupBean groupBean = new GroupBean(false, "商家" + i);

groupList.add(groupBean);

List list = new ArrayList<>();

for (int j = 0; j

ChildBean childBean = new ChildBean("商品" + i, 1 + i, 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 郑文杰 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(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {

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);

convertView.setTag(holder);

} else {

holder = (ChildViewHolder) convertView.getTag();

}

//赋值

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));

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;

}

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 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;

}

//主界面全选框选中状态

public void allChecked(boolean bool) {

for (int i = 0; i

groupList.get(i).setChecked(bool);

for (int j = 0; 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

for (int j = 0; j

if (childList.get(i).get(j).isChecked()) {

int price = childList.get(i).get(j).getPrice();

sumMoney += price;

}

}

}

return sumMoney;

}

/**

* 计算商品的总数量

*

* @return

*/

private int totalCount() {

count = 0;

for (int i = 0; i

for (int j = 0; j

if (childList.get(i).get(j).isChecked()) {

//遍历所有商品,只要是选中状态的,就加1

count++;

}

}

}

return count;

}

}

childBean:package com.baway.twoshopcar;

/**

* Created by hhh on 2017/10/24.

*/

public class ChildBean {

private String childName;

private int price;

private boolean checked;

public ChildBean(String childName, int price, boolean checked) {

this.childName = childName;

this.price = price;

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 boolean isChecked() {

return checked;

}

public void setChecked(boolean checked) {

this.checked = checked;

}

}

groupBean:package com.baway.twoshopcar;

/**

* Created by hhh 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"?>

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">

android:id="@+id/ll"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_alignParentBottom="true"

android:orientation="horizontal">

android:id="@+id/cb_all"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_gravity="center_vertical"

android:text="全选" />

android:layout_width="wrap_content"

android:layout_height="match_parent"

android:layout_marginLeft="20dp"

android:gravity="center_vertical"

android:text="合计:" />

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" />

android:layout_width="wrap_content"

android:layout_height="match_parent"

android:layout_marginLeft="30dp"

android:gravity="center_vertical"

android:text="数量" />

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" />

android:id="@+id/elv"

android:layout_above="@id/ll"

android:layout_width="match_parent"

android:layout_height="match_parent">

childitem布局文件:<?xml  version="1.0" encoding="utf-8"?>

android:layout_width="match_parent"

android:layout_height="40dp"

android:background="#330000ff"

android:paddingLeft="20dp"

android:gravity="center_vertical"

android:orientation="horizontal">

android:id="@+id/cb"

android:layout_width="wrap_content"

android:layout_height="wrap_content" />

android:id="@+id/tvName"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_marginLeft="5dp" />

android:id="@+id/tvPrice"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_marginLeft="60dp" />

groupitem布局:<?xml  version="1.0" encoding="utf-8"?>

android:layout_width="match_parent"

android:layout_height="40dp"

android:background="#330000ff"

android:gravity="center_vertical"

android:orientation="horizontal">

android:id="@+id/cb"

android:layout_width="wrap_content"

android:layout_height="wrap_content" />

android:id="@+id/tvName"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_marginLeft="5dp" />

看完了这篇文章,相信你对“Android怎么实现二级列表购物车功能”有了一定的了解,如果想了解更多相关知识,欢迎关注亿速云行业资讯频道,感谢各位的阅读!

android购物车栏,Android怎么实现二级列表购物车功能相关推荐

  1. Android:ExpandableListView实现下拉二级列表

    来源:菜鸟教程,下面是直接下载的地址 ExpandableListViewDemo.zip 下面是实现案例 还没弄明白,但是抄源码确实实现了 下面是菜鸟教程的地址,自己留着备用记录一下,xdm,冲~~ ...

  2. android 透明栏,Android状态栏透明(沉浸式效果)

    Android状态栏透明(沉浸式效果) 默认效果 沉浸式效果 方式一 源码 1. 修改状态栏和导航栏的属性为透明 if (Build.VERSION.SDK_INT >= Build.VERSI ...

  3. Android JetPack Compose初步2~实现可滚动列表的功能

    Android JetPack Compose的配置参考Android JetPack Compose初步1 在本应用中定义可滚动的列表的界面,类似RecyclerView组件的显示效果. 一.定义实 ...

  4. xmarin.android导航栏,android – 如何在xamarin表单中更改导航页面后退按钮

    我想在导航页面中更改后退箭头图像.为此在Android应用程序中我创建了导航页面渲染器,然后使用方法toolbar.SetNavigationIcon和它不工作,但当我使用toolbar.SetLog ...

  5. android购物车二级列表实现+MVP+Okhttp

    //主界面 package com.example.shop;import android.os.Bundle; import android.os.Handler; import android.o ...

  6. android二级列表展开,ExpandableListView控件实现二级列表

    效果图如下: 二级列表附有点击事件. 1.布局文件: 此处加了一个自定义的导航RelativeLayout,记得注activity的时候添加 android:theme="@style/Th ...

  7. Android实现RecyclerView二级列表可折叠展开选中

    前言 项目里需要实现个可折叠,可展开的的二级列表,首先想到了用ExpandListView去实现,ExpandListView是继承ListView的.由于项目里所有列表都用Recycleview,再 ...

  8. Android开发丶二级列表的联动功能实现

    通常我们在外卖或者商城app会看到竖排二级列表的界面,点击左边列表的分类菜单,右边列表则会显示对应分类下的列表内容,这篇博文将对该功能的实现归纳和整理. 首先看下效果图: 在第一个页面选择最多三个标签 ...

  9. Android 泽宇二级列表

    在开发 Android APP 的时候,难免会需要实现二级列表的情况,而在自己的项目中使用的列表是ExpandableListView 如若转发标明转载处:https://mp.csdn.net/po ...

最新文章

  1. 数据可视化的基本原理——视觉通道
  2. 去掉数组左右两边的引号
  3. Docker的学习笔记(开发的技术分享转发)
  4. 【高等数学】微分中值定理
  5. 失落城堡获取服务器信息,《失落城堡》精英服资格获取方法 失落城堡精英服招募...
  6. android启动过程之init.rc文件浅析
  7. zabbix监控之概念和安装
  8. Linux 内核--任务0的运行(切换到用户模式)move_to_user_mode
  9. Android zip文件压缩与解压
  10. (附源码)PHP疫情上报管理系统 毕业设计 170948
  11. 可对接WMS|ERP跨境电商的分拣线 仓储物流智能快递直线分拣机
  12. 阿里云WordPress建网站的方法
  13. JavaWeb 注解
  14. BZOJ 2794: [Poi2012]Cloakroom 询问离线 背包dp
  15. 狂神说SpringCloud学习笔记
  16. Android ActionBar 更改返回图标
  17. GBase 8c的运行环境
  18. SSO(Single Sign On)系列(一)--SSO简介
  19. 如何利用通达信进行选股集合操作
  20. linux怎么卸载mailx,Linux下mail/mailx命令发送邮件

热门文章

  1. Vue表单输入绑定(文本框和复选框)
  2. java之classpath到底是什么
  3. UITextField 对比 UITextView
  4. 第八章 Hyper-V 2012 R2 故障转移群集
  5. QT生成在Windows下有图标的exe文件(IDE=QT Creator)
  6. [转载] python实现三角形面积计算
  7. WebApiThrottle限流框架
  8. 类型xxx 无法反序列化。缺乏对应的数据成员。
  9. Java--文档注释
  10. TSS ESS RSS