购物车二级列表的实现,在一级列表基础上,bean类里再添加两个字段(请求本地json数据)

来源:互联网 发布:知彼手机定位苹果 编辑:程序博客网 时间:2024/05/14 05:00


本文链接:http://blog.csdn.net/IT666DHW/article/details/78576847(参考本链接文章)


首先bean类里添加两个字段,,并且封装get set方法

[html] view plain copy
  1.  //商品的选中 属性  
  2.   private boolean check;  
  3.   
  4.  //商家是否选中  
  5.  private boolean shopCheck;  
  6.   
  7. //是否是第一个 如果isfirst 等于1 显示商户的名称, 否则隐藏商户的名称  
  8.  private int isFirst = 2;  

Activity里面写一个setFirst()方法,并调用, 设置字段里面的isfirst的值

[html] view plain copy
  1. setFirst(mAllOrderList)  
  2.  /**  
  3.      * 是否需要 显示商家  
  4.      *  
  5.      * @param mAllOrderList  
  6.      */  
  7.     private void setFirst(List<ShopBean.OrderDataBean.CartlistBean> mAllOrderList){  
  8.   
  9.         if(mAllOrderList.size()>0){  
  10.             //如果是第一条数据 就设置是第一条为1  
  11.             mAllOrderList.get(0).setIsFirst(1);  
  12.   
  13.             //从第二条开始遍历,  
  14.             for(int i=1;i<mAllOrderList.size();i++){  
  15.   
  16.             //如果两个挨着的是同一个商家的  
  17.                 if(mAllOrderList.get(i).getShopId() == mAllOrderList.get(i-1).getShopId()){  
  18.                     //就设置为2  不是第一个条目 ,隐藏商家  
  19.                     mAllOrderList.get(i).setIsFirst(2);  
  20.                 }else {  
  21.                     //设置为1  是第一个条目 显示商家  
  22.                     mAllOrderList.get(i).setIsFirst(1);  
  23.                 }  
  24.             }  
  25.        }  
  26.   
  27.     }  

适配器的MyViewHolder里面找到控件

[html] view plain copy
  1. shop_checkbox = (CheckBox) itemView.findViewById(R.id.shop_checkbox);  
  2. shop_name = (TextView) itemView.findViewById(R.id.shop_name);  

适配器Adapter里面onBindViewHolder里面设置进入页面是否显示或隐藏商家

根据position判断是第几个条目,然后显示默认的状态,

设置商铺前面的shop_checkbox的点击事件,.调用商品的 监听,(同一个,都是在Activity里面求和)

在商品前面的checkbox的点击事件,,控制商铺前面的checkbox的状态

[html] view plain copy
  1. @Override  
  2.    public void onBindViewHolder(final MyViewHolder holder, final int position) {  
  3.   
  4.         if(list.get(position).getIsFirst() == 1){  
  5.                //显示商家  
  6.                holder.shop_name.setVisibility(View.VISIBLE);//显示商家  
  7.                holder.shop_checkbox.setVisibility(View.VISIBLE);//显示多选框  
  8.                holder.shop_name.setText(list.get(position).getShopName());//设置商家名字  
  9.                holder.shop_checkbox.setChecked(list.get(position).isShopCheck());//设置商家的选中状态  
  10.   
  11.            }else{  
  12.                //隐藏商家  
  13.                holder.shop_checkbox.setVisibility(View.GONE);  
  14.                holder.shop_name.setVisibility(View.GONE);  
  15.            }  
  16.   
  17.   
  18.        //商家的checkbox的点击事件,控制里面每个商品的选中状态  
  19.        holder.shop_checkbox.setOnClickListener(new View.OnClickListener() {  
  20.            @Override  
  21.            public void onClick(View v) {  
  22.                //数据源改变,,把当前的选中状态 设置给数据源  
  23.                list.get(position).setShopCheck(holder.shop_checkbox.isChecked());  
  24.   
  25.                for (int i=0;i<list.size();i++){  
  26.                    //如果当前的是同一家上铺的 就商品都 设置成 选中  
  27.                    if(list.get(position).getShopId()==list.get(i).getShopId()){  
  28.                        //设置成和 商铺前面的 状态一样  
  29.                       list.get(i).setCheck(holder.shop_checkbox.isChecked());  
  30.                    }  
  31.                }  
  32.                //刷新适配器  
  33.                notifyDataSetChanged();  
  34.   
  35.                //调用 商品点击checkbox的接口就可以,,回调到activity里面求和  
  36.                if(checkBoxListener!=null){  
  37.                    checkBoxListener.check(position,holder.customView.getCurrentCount(),holder.checkBox.isChecked(),list);  
  38.                }  
  39.            }  
  40.        });  
  41.   
  42.        //-----------------------------------  
  43.        //设置图片  
  44.        ImageLoader.getInstance().displayImage(list.get(position).getDefaultPic(),holder.shopface);  
  45.   
  46.        //设置单价,从数据源中  
  47.       holder.danjia.setText(list.get(position).getPrice()+"");  
  48.        //设置输入框中的值  
  49.        holder.customView.setEditText(list.get(position).getCount());  
  50.   
  51.        //复用视图,防止错乱,  数据源里面绑定过了check的值,  
  52.        holder.checkBox.setChecked(list.get(position).isCheck());  
  53.   
  54.        /**  
  55.         * 商品前面的多选框checkbox ,也要控制 商家前面的 多选框shop_checkbox  
  56.         *  
  57.         * */  
  58.        holder.checkBox.setOnClickListener(new View.OnClickListener() {  
  59.            @Override  
  60.            public void onClick(View v) {  
  61.                //holder.checkBox.isChecked()是当前的多选框的选中状态,,赋值给数据源中的标记  
  62.                list.get(position).setCheck(holder.checkBox.isChecked());  
  63.   
  64.                /*  
  65.                * 添加控制商家 shopcheckbox 的状态  
  66.                * */  
  67.               for (int i=0;i<list.size();i++){  
  68.                   for (int j=0;j<list.size();j++){  
  69.                       //如果是同一家商铺的商品,并且只要有一个商品是未选中,那么商铺的 也不选中  
  70.                       if(list.get(j).getShopId()==list.get(i).getShopId()&& !list.get(j).isCheck()){  
  71.                           //商铺的不选中  
  72.                           list.get(i).setShopCheck(false);  
  73.                           break;  
  74.                       }else{  
  75.                           //如果同一家商铺的商品,并且所有商品是选中的,,商铺的也选中  
  76.                           list.get(i).setShopCheck(true);  
  77.                       }  
  78.                   }  
  79.               }  
  80.   
  81.   
  82.                notifyDataSetChanged();  
  83.   
  84.                //接口回调  
  85.                if(checkBoxListener !=null){  
  86.                    checkBoxListener.check(position,holder.customView.getCurrentCount(),holder.checkBox.isChecked(),list);  
  87.                }  
  88.            }  
  89.        });  
点击商品的删除按钮以后 需要重新设置商家是否显示和隐藏,调用setFirst()方法

[html] view plain copy
  1. //删除按钮的接口  
  2.        cartAdapter.setDelListener(new CartAdapter.DelListener() {  
  3.            @Override  
  4.            public void del(int positon, List<CartBean.OrderDataBean.CartlistBean> list) {  
  5.                //求和的方法  
  6.                sum(list);  
  7.                //点击删除 重新设置显示和隐藏商家  
  8.                setFirst(list);  
  9.            }  
  10.        });  
在下面 的全选按钮 点击事件里 需要设置改变数据源中的控制商家选中状态的shopCheck,,

[html] view plain copy
  1. select = false;  
  2.        //下面全选按钮的点击事件  
  3.        quanxuan.setOnClickListener(new View.OnClickListener() {  
  4.            @Override  
  5.            public void onClick(View v) {  
  6.                //获取到tag  
  7.               // int tag = (int) allSelect.getTag();  
  8.                 int tag = (int) quanxuan.getTag();  
  9.                if(tag==1){  
  10.                    //如果点击了全选,就记个标记select为true  
  11.                  //  allSelect.setTag(2);  
  12.                   // allSelect.setBackgroundResource(R.drawable.shopcart_selected);  
  13.                    quanxuan.setTag(2);  
  14.                    quanxuan.setBackgroundResource(R.drawable.shopcart_selected);  
  15.                    select = true;  
  16.                }else{  
  17.                    //如果点击了全选,就记个标记select为false  
  18.                   // allSelect.setTag(1);  
  19.                   // allSelect.setBackgroundResource(R.drawable.shopcart_unselected);  
  20.                    quanxuan.setTag(1);  
  21.                    quanxuan.setBackgroundResource(R.drawable.shopcart_unselected);  
  22.                    select = false;  
  23.                }  
  24.   
  25.               for(CartBean.OrderDataBean.CartlistBean bean : CartList){  
  26.                   //给数据源里面的check做标记为true  
  27.                   bean.setCheck(select);  
  28.                   bean.setShopCheck(select);  
  29.               }  
  30.                cartAdapter.notifyDataSetChanged();  
  31.   
  32.                sum(cartAdapter.getList());  
  33.            }  
  34.        });  
[html] view plain copy
  1.   
阅读全文
0 0
原创粉丝点击