android 仿淘宝京东购物车 ListView嵌套CheckBox

MyActivity===========================代码如下
package com.example.ListViewBoxDemo;

import android.app.Activity;import android.content.Context;import android.os.Bundle;import android.view.View;import android.widget.CheckBox;import android.widget.CompoundButton;import android.widget.ListView;

import java.util.ArrayList;

/** * * 模仿淘宝购物车中的ListView 中嵌套CheckBox * 实现每个店铺全选 已经不选中的功能 *实现原理 在bean中添加一个标记 通过CheckBox的改变标记来变化bean中的标记 * 具体不明白的加Q 513599210 */public class MyActivity extends Activity {    /**     * Called when the activity is first created.     */    ArrayList<ArrayList<ShopBean>> arrayList = new ArrayList<>(); // 代表所有的加入购物车中的店铺    ArrayList<ShopBean> arrayListone = new ArrayList<>();  //代表每个店铺    ArrayList<ShopBean> arrayListtwo = new ArrayList<>();    ArrayList<ShopBean> arrayListfow = new ArrayList<>();

    ListView shopping_listview;    Context context;    CheckBox all_chekbox;    ItemAdapter itemAdapter;

    int size; // 统计有多少个商品    int oksize; // 统计bean中的是否选中    boolean boxoutstate =true;// 表示CheckBox是外部的点击还是内部的方法   默认执行外部全选方法    boolean boxoutclickstate =true;// 是内部的item CheckBox 选中或者取消传递出来的参数接收

    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);        this.context = this;        shopping_listview = (ListView) findViewById(R.id.shopping_listview);        all_chekbox = (CheckBox) findViewById(R.id.all_chekbox);        arrayListone.add(new ShopBean());        arrayListone.add(new ShopBean());        arrayListone.add(new ShopBean());        arrayListtwo.add(new ShopBean());        arrayListtwo.add(new ShopBean());        arrayListtwo.add(new ShopBean());        arrayListfow.add(new ShopBean());        arrayListfow.add(new ShopBean());        arrayListfow.add(new ShopBean());        arrayList.add(arrayListone);        arrayList.add(arrayListtwo);        arrayList.add(arrayListfow);

        itemAdapter = new ItemAdapter(this, arrayList, new ItemAdapter.Iparentbox() {            @Override            public void clickbox(boolean boxstate) {                // 选中店铺中的CheckBox回调                boxoutclickstate=boxstate;//                all_chekbox.setChecked(boxstate);

                size = 0;                oksize = 0;                for (ArrayList<ShopBean> arrbean : arrayList) {                    for (ShopBean bean : arrbean) {                        size++; // 统计有 多少个元素                    }                }                for (ArrayList<ShopBean> arrbean : arrayList) {                    for (ShopBean bean : arrbean) {                        if (bean.parentbox) {                            oksize++;// 统计元素中有多少个是已经选中                        }

                    }                }                System.out.println("====saze===" + size + "===oksaze====" + oksize);                // 如何bean中的表示选中 与 arrayList相等设置外部box全选                if (size == oksize) {                    all_chekbox.setChecked(true);                } else {                    // 不成立设置box不是全选 同时改变 boxoutstate 标记 为外内部box执行方法                    boxoutstate = false;                    all_chekbox.setChecked(false);                }

            }        }, R.layout.item_shop);

        nextAdate();

        all_chekbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {            @Override            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {                System.out.println("boxoutstate==="+boxoutstate);                    if (isChecked) {                        for (ArrayList<ShopBean> arrbean : arrayList) {                            for (ShopBean bean : arrbean) {                                bean.parentbox = isChecked;                            }                        }                        itemAdapter.setBoxState(isChecked);                    } else {                            // 这里是执行了内部itembox 的执行                        if((boxoutstate==false)&&(boxoutclickstate==false)){                            System.out.println("内部的box点击");                        }else {                            for (ArrayList<ShopBean> arrbean : arrayList) {                                for (ShopBean bean : arrbean) {                                    bean.parentbox = isChecked;                                }                            }                            itemAdapter.setBoxState(isChecked);                        }

                    }

            }

        });

    }

    // 更新数据    private void nextAdate() {        shopping_listview.setAdapter(itemAdapter);    }}

-------------------------------------------------------------------------------------------------------------------------------------------item的代码 ===========================================================================================================================================
package com.example.ListViewBoxDemo;

import android.content.Context;import android.view.View;import android.widget.CheckBox;import android.widget.CompoundButton;import android.widget.LinearLayout;

import java.util.ArrayList;import java.util.List;

/** * Created by ADMIN on 2015/12/16. */public class ItemAdapter extends CommonAdapter<ArrayList<ShopBean>> {    Context contextData;    List<ArrayList<ShopBean>> datas;    Iparentbox iparentbox; // 内部box  的选中 取消接口回调

    public ItemAdapter(Context context, List<ArrayList<ShopBean>> datas, Iparentbox iparentbox, int layoutId) {        super(context, datas, layoutId);        this.contextData = context;        this.datas = datas;        this.iparentbox = iparentbox;    }

    public interface Iparentbox {        public void clickbox(boolean boxstate);    }

    @Override    public void convert(ViewHolder holder, ArrayList<ShopBean> shopBeans) {        CheckBox determine_chekbox = holder.getView(R.id.determine_chekbox);        // 这是判断是否        int h = 0;        boolean statechildbox = false;        for (ShopBean shoppingCartBean : datas.get(holder.getPosition())) {            if (shoppingCartBean.parentbox) {                h++;            }        }        System.out.println("====h===" + h);        // 判断加入购物车中的每个店铺的多个商品是否全选 全选 店铺的box 也选中        if (datas.get(holder.getPosition()).size() == h) {            determine_chekbox.setChecked(true);            System.out.println("执行过来了");        } else if (h == 0) {            System.out.println("执行过来了===");            determine_chekbox.setChecked(false);        } else {

        }

        //  店铺 Box选中或者未选中时候刷新 里面的商品        determine_chekbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {            @Override            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {                ArrayList<ShopBean> shoppingCartBeans1 = datas.get(holder.getPosition());                if (isChecked) {                    for (ShopBean databean : shoppingCartBeans1) {                        databean.parentbox = isChecked;                    }                    notifyDataSetChanged();                    iparentbox.clickbox(isChecked);                } else {                    for (ShopBean databean : shoppingCartBeans1) {                        databean.parentbox = isChecked;                    }                    notifyDataSetChanged();                    iparentbox.clickbox(isChecked);                }

            }        });

        LinearLayout add_shoping_item = holder.getView(R.id.add_shoping_item);        add_shoping_item.removeAllViews();        for (int i = 0; i < shopBeans.size(); i++) {

            View inflate = View.inflate(contextData, R.layout.add_item_shoppingcart, null);            CheckBox checkBox = (CheckBox) inflate.findViewById(R.id.add_chekbox);            checkBox.setChecked(shopBeans.get(i).parentbox);            add_shoping_item.addView(inflate);

            final int finalI = i;            checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {                @Override                public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {                    if (isChecked) {                        shopBeans.get(finalI).parentbox = isChecked;                        System.out.println("子控件选中执行过来");                        notifyDataSetChanged();                        iparentbox.clickbox(isChecked);

                    } else {                        shopBeans.get(finalI).parentbox = isChecked;                        iparentbox.clickbox(isChecked);                        notifyDataSetChanged();                    }

                }            });

        }    }

    public void setBoxState(boolean state) {        System.out.println("state===" + state);        if (state) {            notifyDataSetChanged();        } else {            notifyDataSetChanged();        }    }

}

===============================================================
源码 http://download.csdn.net/detail/qq_15696769/9364407
时间: 2024-10-05 20:29:09

android 仿淘宝京东购物车 ListView嵌套CheckBox的相关文章

Android仿淘宝购物车demo

夏的热情渐渐退去,秋如期而至,丰收的季节,小编继续着实习之路,走着走着,就走到了购物车,逛过淘宝或者是京东的小伙伴都知道购物车里面的宝贝可不止一件,对于爱购物的姑娘来说,购物车里面的商品恐怕是爆满,添加不进去了,以前逛淘宝的时候,小编没有想过要怎么样实现购物车,就知道在哪儿一个劲儿的逛,但是现在不一样了,小编做为一个开发者,想的就是该如何实现,捣鼓了两天的时间,用listview来实现,已经有模有样了,现在小编就来简单的总结一下实现购物车的心路历程,帮助有需要的小伙伴,欢迎小伙伴们留言交流. 首

vue mint-ui 实现省市区街道4级联动(仿淘宝京东收货地址4级联动)

先去下载一个“省份.城市.区县.乡镇” 四级联动数据,然后 引入 import { Picker } from 'mint-ui'; //前提是npm install mint-ui -S Vue.component(Picker.name, Picker); 组件使用 <mt-picker :slots="addressSlots" class="picker" @change="onAddressChange" :visible-ite

仿淘宝,京东红包雨(基于Phaser框架)

本红包雨项目是基于HTML5的游戏框架Phaser写的,最终形成的是一个canvas,所以性能很好,但是必须要说的是这个框架比较大,压缩后也有700K左右,所以请慎用. 代码地址: https://github.com/AmosXu/red-packet-rain 1. 效果展示         图片依次是倒计时页面,抢红包页面,拆红包页,红包展示页,这些页面都是写在一个canvas里面的,无刷新的切换效果,性能超级棒 2.代码展示 贴上主要的代码js代码和注释 //初始化图片 let imgj

仿淘宝京东商品图片放大预览功能

<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>图片放大镜效果</title> <style> *{ padding: 0; margin: 0; } body{ padding: 50px; position: relative; } .goods { width: 220px; height: 200px; position

Listview嵌套Viewpager实现仿淘宝搜狐广告主页,并实现listview的下拉刷新

Android实现功能:Listview嵌套viewpager仿淘宝搜狐视频主页面,和listview的下拉刷新. 什么都不说了:直接上图说效果 listview嵌套viewpager实现仿淘宝的广告滑动主页面 源码连接:(http://download.csdn.net/detail/qq_30000411/9528977) APK下载连接:(http://download.csdn.net/detail/qq_30000411/9528973) 下面给出我源码的主要文件构成: MyListV

Android中仿淘宝首页顶部滚动自定义HorizontalScrollView定时水平自动切换图片

Android中仿淘宝首页顶部滚动自定义HorizontalScrollView定时水平自动切换图片 自定义ADPager 自定义水平滚动的ScrollView效仿ViewPager 当遇到要在ViewPager中添加多张网络请求图片的情况下,不能进行复用,导致每次都要重新去求情已经请求过的数据致使流量数据过大 自定义的数据结构解决了这个问题,固定传递的图片数据之后进行统一请求,完成后进行页面切换数据复用 代码中涉及网络请求是用的Volley网络请求框架 PicCarousel是网络数据请求的U

android版高仿淘宝客户端源码V2.3

android版高仿淘宝客户端源码V2.3,这个版本我已经更新到2.3了,源码也上传到源码天堂那里了,大家可以看一下吧,该应用实现了我们常用的购物功能了,也就是在手机上进行网购的流程的,如查看产品(浏览),下订单,进行付款等流程,该应用一一实现了,同时还可以远程读取图片功能,和实时监控网络状态等操作,大家如果有什么不同的意见可以留下,我们会定时来查看. 原文地址:http://www.cnblogs.com/androidioscom/p/3613035.html [1].[代码] [Java]

iOS高仿淘宝购物车,功能模块应有尽有

刚做完一个淘宝的购物车,按着淘宝做的,换了个产品经理,人家喜欢JD的购物车,一句话,咱换个风格,好心 酸有没有,天天刷存在感,只有我们苦逼了,那么既然需求来了,就要按着大爷的要求改了,为了纪念下,咱写个 Demo给大家分享下.    我擦,我一看代码,我还是用AutoLayout做的,主界面代码都能快接近800了,全加起来想想有点多啊,这简直是用 生命在写Demo啊,该有的效果全有了,各位请看图       再来一组 简单分析下功能 1.给UIKit控件增加Badge的扩展(这个扩展需要的去代码

高仿淘宝客户端

高仿淘宝客户端 仿淘宝安卓客户端的demo源码,主要实现了:商品的基本展示.宝贝详情,图片展示的放大缩小功能.界面之间切换的动画.购物车多项删除.弹窗的动画效果.首页广告的轮播效果.获得本机具有传感器的列表.listView的上拉刷新,下拉加载功能.二维码扫描.刮刮乐等功能和效果. 下载地址:http://www.devstore.cn/code/info/925.html 运行截图: