最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android實(shí)現(xiàn)二級列表購物車功能

 更新時(shí)間:2017年10月25日 10:01:07   作者:jie哈哈哈  
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)二級列表購物車功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了Android實(shí)現(xiàn)二級列表購物車功能的具體代碼,供大家參考,具體內(nèi)容如下

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<GroupBean> groupList = new ArrayList<>();
  private List<List<ChildBean>> 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<ChildBean> 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<GroupBean> groupList;
  private List<List<ChildBean>> childList;
  private int count;
  private int sumMoney;

  public MyAdapter(Context context, List<GroupBean> groupList, List<List<ChildBean>> 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設(shè)置點(diǎn)擊事件
    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() + "");
    //設(shè)置點(diǎn)擊事件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<ChildBean> childBeen = childList.get(groupPosition);
        ChildBean childBean = childBeen.get(childPosition);
        childBean.setChecked(cb.isChecked());
        //計(jì)算選中的商品數(shù),并發(fā)送到主界面進(jìn)行顯示
        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> 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;
        //根據(jù)cb.isChecked()是否選中,給一級列的checkbox改變狀態(tài)
        groupList.get(groupPosition).setChecked(cb.isChecked());
        List<ChildBean> childBeenList = childList.get(groupPosition);
        for (ChildBean childBean : childBeenList){
          childBean.setChecked(cb.isChecked());
        }
        //計(jì)算選中的商品數(shù)和金額,并發(fā)送到主界面進(jìn)行顯示
        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;
  }


  //主界面全選框選中狀態(tài)
  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);
      }
    }
    //計(jì)算選中的商品數(shù),發(fā)送到主界面進(jìn)行顯示
    MCEvent mcEvent = new MCEvent();
    mcEvent.setCount(totalCount());
    mcEvent.setMoney(totalPrice());
    EventBus.getDefault().post(mcEvent);
    notifyDataSetChanged();

  }

  /**
   * 計(jì)算商品總價(jià)格
   *
   * @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 price = childList.get(i).get(j).getPrice();
          sumMoney += price;
        }
      }
    }
    return sumMoney;
  }

  /**
   * 計(jì)算商品的總數(shù)量
   *
   * @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()) {
          //遍歷所有商品,只要是選中狀態(tài)的,就加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"?>
<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="合計(jì):" />

    <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="數(shù)量" />

    <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:paddingLeft="20dp"
  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" />

  <TextView
    android:id="@+id/tvPrice"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginLeft="60dp" />

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

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Android獲取設(shè)備屏幕寬高pix值的方法

    Android獲取設(shè)備屏幕寬高pix值的方法

    這篇文章主要介紹了Android獲取設(shè)備屏幕寬高pix值的方法,需要的朋友可以參考下,具體內(nèi)容如下
    2018-05-05
  • android中LinearLayoutManager一鍵返回頂部示例

    android中LinearLayoutManager一鍵返回頂部示例

    本篇文章主要介紹了android中LinearLayoutManager一鍵返回頂部,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。
    2017-02-02
  • listView的item中有checkbox,導(dǎo)致setOnItemClick失效的原因及解決辦法

    listView的item中有checkbox,導(dǎo)致setOnItemClick失效的原因及解決辦法

    這篇文章主要介紹了listView的item中有checkbox,導(dǎo)致setOnItemClick失效的原因及解決辦法,需要的朋友可以參考下
    2017-01-01
  • Android音樂播放器制作 點(diǎn)擊歌曲實(shí)現(xiàn)播放(二)

    Android音樂播放器制作 點(diǎn)擊歌曲實(shí)現(xiàn)播放(二)

    這篇文章主要為大家詳細(xì)介紹了Android音樂播放器的制作方法,點(diǎn)擊歌曲實(shí)現(xiàn)播放,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-02-02
  • Android Studio無法改變Button背景顏色解決辦法

    Android Studio無法改變Button背景顏色解決辦法

    今天我來和大家探討一個(gè)在Android開發(fā)中常見但可能讓初學(xué)者感到困惑的問題,如何在Android Studio中改變Button的背景顏色,這個(gè)問題看似簡單,但實(shí)際操作中可能會(huì)遇到一些意想不到的挑戰(zhàn),接下來,我將從多個(gè)角度為大家提供解決方案,需要的朋友可以參考下
    2024-05-05
  • 5步教你快速寫一個(gè)android Router路由框架

    5步教你快速寫一個(gè)android Router路由框架

    本篇文章主要介紹了5步教你快速寫一個(gè)Router路由框架(詳細(xì)步驟),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-11-11
  • Android布局之GridLayout網(wǎng)格布局

    Android布局之GridLayout網(wǎng)格布局

    網(wǎng)格布局標(biāo)簽是GridLayout。這個(gè)布局是android4.0新增的布局。這個(gè)布局只有4.0之后的版本才能使用。本文給大家介紹Android布局之GridLayout網(wǎng)格布局相關(guān)知識,感興趣的朋友一起學(xué)習(xí)吧
    2015-12-12
  • Android實(shí)現(xiàn)視頻的畫中畫功能

    Android實(shí)現(xiàn)視頻的畫中畫功能

    手機(jī)觀看視頻的時(shí)候,有些工作需要溝通,或者參與搶購活動(dòng),同時(shí)為了不錯(cuò)過視頻精彩片段,會(huì)選擇畫中畫模式,這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)視頻的畫中畫功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • Android編程開發(fā)之seekBar采用handler消息處理操作的方法

    Android編程開發(fā)之seekBar采用handler消息處理操作的方法

    這篇文章主要介紹了Android編程開發(fā)之seekBar采用handler消息處理操作的方法,結(jié)合實(shí)例分析了Android實(shí)現(xiàn)進(jìn)度條功能的相關(guān)技巧,需要的朋友可以參考下
    2015-12-12
  • Android 獲取判斷是否有懸浮窗權(quán)限的方法

    Android 獲取判斷是否有懸浮窗權(quán)限的方法

    今天小編就為大家分享一篇Android 獲取判斷是否有懸浮窗權(quán)限的方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07

最新評論

昆明市| 富锦市| 宁城县| 新民市| 三穗县| 静宁县| 五河县| 滦南县| 鄂伦春自治旗| 同仁县| 横峰县| 盖州市| 花莲市| 滦平县| 思南县| 泗洪县| 永靖县| 宜黄县| 沈阳市| 博湖县| 富源县| 周宁县| 满洲里市| 东乡| 安顺市| 石景山区| 清新县| 樟树市| 弥勒县| 清水河县| 珠海市| 本溪| 兴化市| 嘉禾县| 清水县| 南漳县| 牙克石市| 文成县| 江油市| 达孜县| 尼勒克县|