热门标签 | HotTags
当前位置:  开发笔记 > Android > 正文

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

这篇文章主要为大家详细介绍了Android实现二级列表购物车功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了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  list = new ArrayList<>();
      for (int j = 0; j <2; 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  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 

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布局文件:

<&#63;xml version="1.0" encoding="utf-8"&#63;>


  

    

    

    

    

    
  

  



childitem布局文件:

<&#63;xml version="1.0" encoding="utf-8"&#63;>


  

  

  



groupitem布局:

<&#63;xml version="1.0" encoding="utf-8"&#63;>


 

 


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


推荐阅读
author-avatar
337364卢
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有