博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android 购物车编辑全选,取消全选 + 计算商品价格
阅读量:6423 次
发布时间:2019-06-23

本文共 13617 字,大约阅读时间需要 45 分钟。

hot3.png

 网上编辑购物车全选,取消全选的例子有很多,我最近正好在做这个功能,然后就整理了好多网上的例子,把好几个人的思想整理到我的项目中,东西虽然不多,但也费不少劲。。今天终于测试好了。上图看看效果吧~~

第一张:选择单个商品

095042_oYxm_2008084.jpg

全选。

095148_fiz1_2008084.jpg

全不选我就不上图了

现在开始代码吧:

第一个布局文件 activity_act_view.xml

       
                  
         
           
         
            
             
            
                        
            

这里我用的是自定义的ListView。然后购物车的单个商品详情  item_shoppingcart.xml

     
        
       
     
     
     
          
             
                 
                               
             
                 
                         
                 
                            

然后就是我的购物车代码了,因为我的主页面用的是FragmentPagerAdapter+ViewPager,所以每个类都继承了Fragment

package com.shop.eshopservice;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Date;import java.util.HashMap;import java.util.List;import java.util.Map;import android.app.Activity;import android.content.Context;import android.content.Intent;import android.os.AsyncTask;import android.os.Bundle;import android.support.v4.app.Fragment;import android.view.LayoutInflater;import android.view.MotionEvent;import android.view.View;import android.view.View.OnClickListener;import android.view.View.OnTouchListener;import android.view.ViewGroup;import android.view.animation.AnimationSet;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.BaseAdapter;import android.widget.CheckBox;import android.widget.CompoundButton;import android.widget.CompoundButton.OnCheckedChangeListener;import android.widget.ImageView;import android.widget.TextView;import com.shop.eshopservice.Data.Data;import com.shop.eshopservice.adapter.ShoppingCartAdapter.onCheckedChanged;import com.shop.eshopservice.model.Model;import com.shop.eshopservice.model.Product;import com.shop.eshopservice.model.ShoppingCart;import com.shop.eshopservice.sqlite.dao.EShopOpenHelper;import com.shop.eshopservice.tool.ToastUtils;import com.shop.eshopservice.utils.LoadImg;import com.shop.eshopservice.utils.LoadPictrue;import com.shop.eshopservice.xListView.XListView;import com.shop.eshopservice.xListView.XListView.IXListViewListener;/** * 购物车模块 * @author Administrator * */public class ActionActivity extends Fragment implements OnTouchListener, IXListViewListener, OnClickListener,onCheckedChanged{ private View view; private List
 cartList = new ArrayList
(); private ShoppingCartAdapter cartAdapter; private EShopOpenHelper eshop;// private PullToRefreshListView mListView;  private XListView mListView; private TextView tv_money,tv_toEdit,to_DelBuy; private CheckBox selectAll;  private int pageIndex = 0; private int pageSize = 10; private int visibleLastIndex = 0;   //最后的可视项索引   private int visibleItemCount;       // 当前窗口可见项总数   float fist_down_Y = 0; private AnimationSet animationSet; private boolean[] is_choice; private onCheckedChanged listener;  @Override public void onAttach(Activity activity) {  super.onAttach(activity); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){  view = inflater.inflate(R.layout.activity_act_view, container, false);  eshop = new EShopOpenHelper(getActivity().getApplicationContext());//  mListView = (PullToRefreshListView) view.findViewById(R.id.ShoppingCartListView);  mListView = (XListView)view.findViewById(R.id.ShoppingCartListView);  tv_toEdit = (TextView)view.findViewById(R.id.Cart_toEdit);  //总编辑按钮  to_DelBuy = (TextView)view.findViewById(R.id.cart_pro_tobuy);  selectAll = (CheckBox)view.findViewById(R.id.cb_cart_all);  selectAll.setOnClickListener(this);  is_choice=new boolean[cartList.size()];//  selectAll.set    tv_money = (TextView)view.findViewById(R.id.cart_orderallmoney);    cartList = eshop.selShoppingCart(pageIndex,pageSize);        //从数据库获取购物车的数据  cartAdapter = new ShoppingCartAdapter(cartList, getActivity().getApplicationContext());  //  mListView.setOnScrollListener(this);  mListView.setOnTouchListener(this);  mListView.setXListViewListener(this);  // 设置可以进行下拉加载的功能  mListView.setPullLoadEnable(true);  mListView.setPullRefreshEnable(true);  //  tv_money.setText("");  /*mListView.setOnRefreshListener(new OnRefreshListener() {      @Override   public void onRefresh() {    new GetDataTask(getActivity(), 0).execute();   }      @Override   public void onLoadMore() {    new GetDataTask(getActivity(), 1).execute();   }  });*/  selectAll.setOnCheckedChangeListener(new OnCheckedChangeListener() {      public void onCheckedChanged(CompoundButton arg0, boolean arg1) {    // 记录列表每一行的选中状态数量    int isChoice_all = 0;    if(arg1){     Data.Allprice_cart = 0;     // 设置全选     for(int i = 0;i < cartAdapter.getCount();i++){      cartAdapter.selectedMap.put(i, true);            if(cartList.size()!=0){  //购物车里有商品       Data.Allprice_cart +=(cartList.get(i).getLocalprice())*cartList.get(i).getProcount();      }     }     tv_money.setText("合计:¥"+Data.Allprice_cart+"");        //这里的Data.Allprice_cart是我单独定义的一个放静态数据的类    }else {     // 设置全部取消     for (int i = 0; i < cartAdapter.getCount(); i++) {      // 判断列表每一行是否处于选中状态,如果处于选中状态,则计数+1      if(cartAdapter.selectedMap.get(i)){       // 计算出列表选中状态的数量       isChoice_all += 1;       }     }     // 判断列表选中数是否等于列表的总数,如果等于,那么就需要执行全部取消操作     if (isChoice_all == cartAdapter.getCount()) {      // 如果没有选中了全选,那么就将列表的每一行都不选      for (int i = 0; i < cartAdapter.getCount(); i++) {       // 列表每一行都取消       cartAdapter.selectedMap.put(i, false);       if(cartList.size()!=0){  //购物车里有商品        Data.Allprice_cart -=(cartList.get(i).getLocalprice())*cartList.get(i).getProcount();       }      }     }          tv_money.setText("合计:¥"+Data.Allprice_cart+"");     cartAdapter.notifyDataSetChanged();    }   }  });  mListView.setOnItemClickListener(new OnItemClickListener() {      @Override   public void onItemClick(AdapterView
 parent, View view, int position,     long id) {    if(id<0){     return; // 点击的是headerView或者footerView    }    Intent intent = new Intent(getActivity(), GoodsDetailActivity.class);    Bundle bund = new Bundle();    ShoppingCart cart = (ShoppingCart) parent.getAdapter().getItem(position);    bund.putSerializable("CartInfo",cart);    intent.putExtra("cartvalue",bund);    intent.putExtra("cart", "cart");    startActivity(intent);   }  });  cartAdapter.notifyDataSetChanged();  mListView.setAdapter(cartAdapter);  return  view; } /**  * 滑动时被调用  */ /*@Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {  this.visibleItemCount = visibleItemCount;  visibleLastIndex = firstVisibleItem + visibleItemCount -1; } *//**  * 当滑动改变时调用  *//* @Override public void onScrollStateChanged(AbsListView view, int scrollState) {  int itemsLastIndex = cartAdapter.getCount() -1; //数据集最后一项的索引  int lastIndex = itemsLastIndex +1;  if(scrollState == OnScrollListener.SCROLL_STATE_IDLE && visibleLastIndex == lastIndex){   //如果是自动加载,可以在这里放置异步加载数据的代码     Log.i("LOADMORE", "loading...");    } }*/  private class GetDataTask extends AsyncTask
> {  private Context context;  private int index;  public GetDataTask(Context context, int index) {   this.context = context;   this.index = index;  }  @Override  protected List
 doInBackground(Void... arg0) {   return null;  }  @Override  protected void onPostExecute(List
 result) {   if (index == 0) {    pageIndex = 0;    cartList = eshop.selShoppingCart(pageIndex,pageSize);   //    SimpleDateFormat format = new SimpleDateFormat(//      "yyyy年MM月dd日  HH:mm");//    String date = format.format(new Date());//    mListView.onRefreshComplete(date);   } else if (index == 1) {    pageIndex += 10;    cartList = eshop.selShoppingCart(pageIndex,pageSize);      if(cartList.size() > 0){     for (int i = 0; i < cartList.size(); i++) {      ShoppingCart cart = cartList.get(i);      cartAdapter.addCartItem(cart);     }    }else{     ToastUtils.ToastMessage(getActivity().getApplicationContext(), "亲,已经是最后一条数据啦...");    }    cartAdapter.notifyDataSetChanged();//    mListView.onLoadMoreComplete();   }   onLoad();   super.onPostExecute(result);  }   } @Override public void onRefresh() {  new GetDataTask(getActivity(), 0).execute(); } @Override public void onLoadMore() {  new GetDataTask(getActivity(), 1).execute(); } @Override public boolean onTouch(View arg0, MotionEvent event) {  float y = event.getY();  switch (event.getAction()) {  case MotionEvent.ACTION_DOWN:   //第一次按下时的坐标   fist_down_Y = y;   break;  case MotionEvent.ACTION_MOVE:   if (fist_down_Y - y > 250) {    if (animationSet != null) {     animationSet = null;    }//    animationSet = (AnimationSet) AnimationUtils.loadAnimation(this, R.anim.up_out);   }   // 向下滑动,显示搜索栏   if (y - fist_down_Y > 250) {    if (animationSet != null) {     animationSet = null;    }//    animationSet = (AnimationSet) AnimationUtils.loadAnimation(this, R.anim.down_in);   }   break;  }  return false; } /** 停止加载和刷新 */ private void onLoad() {  mListView.stopRefresh();  // 停止加载更多  mListView.stopLoadMore();  // 设置最后一次刷新时间  mListView.setRefreshTime(getCurrentTime(System.currentTimeMillis())); } /** 简单的时间格式 */ public static SimpleDateFormat mDateFormat = new SimpleDateFormat("MM-dd HH:mm"); public static String getCurrentTime(long time) {  if (0 == time) {   return "";  }  return mDateFormat.format(new Date(time)); } @Override public void getChoiceData(int position, boolean isChoice) {  if(isChoice){   if(cartList.size()!=0){  //购物车里有商品    Data.Allprice_cart +=(cartList.get(position).getLocalprice())*cartList.get(position).getProcount();   }  }else{   if(cartList.size()!=0){    Data.Allprice_cart -=(cartList.get(position).getLocalprice())*cartList.get(position).getProcount();   }  }  // 记录列表处于选中状态的数量  int num_choice = 0;  for (int i = 0; i < cartAdapter.getCount(); i++) {   if(cartList !=null &&(cartAdapter.selectedMap.get(i))){    num_choice ++;   }  }    if(num_choice == cartList.size()){   selectAll.setChecked(true);  } else {   selectAll.setChecked(false);  }  tv_money.setText("合计:¥"+Data.Allprice_cart+""); }   @Override public void onClick(View v) {  switch (v.getId()) {  case R.id.Cart_toEdit:   tv_toEdit.setText("完成");   to_DelBuy.setText("删除");   break;  case R.id.cb_cart_all://   if(selectAll.isChecked()){//    for(int i =0;i< cartAdapter.getCount();i++){//     cartAdapter.selectedMap.put(i, true);     cartAdapter.delContactsIdSet.add(String.valueOf(cartAdapter.list.get(i).getId()));//    }//    //   }else{//    for (int i = 0; i < cartAdapter.getCount(); i++) {//     cartAdapter.selectedMap.put(i, false);     cartAdapter.delContactsIdSet.clear();//    }//   }   cartAdapter.notifyDataSetChanged();   break;  } } class ShoppingCartAdapter extends BaseAdapter {  //保存listview item的状态  HashMap
 map = new HashMap
();   List
 list;  // 用来控制CheckBox的选中状况    Map
 selectedMap;//     HashSet
 delContactsIdSet;  Context ctx;  private LoadImg loadImg;  private double allMoney = 0.0;  public ShoppingCartAdapter(List
 list, Context ctx) {   this.list = list;   this.ctx = ctx;//   delContactsIdSet = new HashSet
();   selectedMap = new HashMap
();   initDate();  }   // 初始化isSelected的数据       private void initDate() {           for (int i = 0; i < list.size(); i++) {               selectedMap.put(i,false);         }       }  public void setList(List
 proList){   this.list = proList;  }  @Override  public int getCount() {   return list.size();  }  @Override  public Object getItem(int arg0) {   return list.get(arg0);  }  @Override  public long getItemId(int arg0) {   return arg0;  }    public void addCartItem(ShoppingCart cart){   list.add(cart);  }    @Override  public View getView(final int position, View convertView, ViewGroup parent) {   Holder hold = null;   View view = null;   if(map.get(position) == null){    // 获得ViewHolder对象               // 导入布局并赋值给convertview               LayoutInflater mInflater = (LayoutInflater) ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);               view = mInflater.inflate(R.layout.item_shoppingcart, null);               hold = new Holder();             hold.toEdit = (TextView)view.findViewById(R.id.Cart_toEdit);             hold.mTitle = (TextView) view.findViewById(R.id.cartItemTextView); //产品标题    hold.mImage = (ImageView) view.findViewById(R.id.CartItemImage);  //产品图片    hold.mPrice = (TextView) view.findViewById(R.id.CartItemPrice);  //产品价格    hold.mCount = (TextView) view.findViewById(R.id.CartItemCount);    hold.check_goods = (CheckBox)view.findViewById(R.id.cb);    final int p = position;    hold.check_goods.setChecked(selectedMap.get(position));    hold.check_goods.setOnClickListener(new OnClickListener() {          @Override     public void onClick(View vi) {      //selectedMap.put(p, true);     }    });    hold.check_goods.setOnCheckedChangeListener(new OnCheckedChangeListener() {          @Override     public void onCheckedChanged(CompoundButton arg0, boolean isChoice) {      if(isChoice){       selectedMap.put(p, true);      }else{       selectedMap.put(p, false);      }      getChoiceData(position, isChoice);        //当每次选中发生变化时调用它进行判断     }    });    view.setTag(hold);   }else{    //取出hold    view = map.get(position);    hold = (Holder)view.getTag();   }   hold.mTitle.setText(ToDBC(list.get(position).getTitle()));   hold.mImage.setTag(Model.SHOPLISTIMGURL + list.get(position).getImageUrl());   hold.mPrice.setText("¥"+list.get(position).getLocalprice() + "");   hold.mCount.setText("X"+list.get(position).getProcount());   // 设置默认显示的图片   hold.mImage.setImageResource(R.drawable.shop_photo_frame);   LoadPictrue.loadImage4(hold.mImage.getTag().toString() ,hold.mImage);  //缓存加载图片   return view;  }  //规定布局页面标题换行代码  public String ToDBC(String input) {        char[] c = input.toCharArray();        for (int i = 0; i< c.length; i++) {            if (c[i] == 12288) {              c[i] = (char) 32;              continue;            }if (c[i]> 65280&& c[i]< 65375)               c[i] = (char) (c[i] - 65248);            }        return new String(c);    }   class Holder {   public TextView mTitle, mPrice, mCount,toEdit;   public ImageView mImage;   public CheckBox check_goods;  } }}

我去,代码竟然这么长,看起来可能有点费劲,但功能实现就好。

转载于:https://my.oschina.net/u/2008084/blog/483228

你可能感兴趣的文章
微信小程序教学第三章(含视频):小程序中级实战教程:列表篇-页面逻辑处理...
查看>>
页面间通信与数据共享解决方案简析
查看>>
Swift 中 Substrings 与 String
查看>>
作为一个开源软件的作者是一种什么样的感受?
查看>>
移动端适配知识你到底知多少
查看>>
TiDB 在 G7 的实践和未来
查看>>
重新认识javascript对象(三)——原型及原型链
查看>>
小学生学“数学”
查看>>
【Vue】组件使用之参数校验
查看>>
FastDFS蛋疼的集群和负载均衡(十七)之解决LVS+Keepalived遇到的问题
查看>>
深入剖析Redis系列(二) - Redis哨兵模式与高可用集群
查看>>
上班第一天的BUG居然是chrome翻译功能导致的
查看>>
Android 用于校验集合参数的小封装
查看>>
iOS混合开发库(GICXMLLayout)七、JavaScript篇
查看>>
instrument 调试 无法指出问题代码 解决
查看>>
理解缓存
查看>>
im也去中心化?Startalk(星语)的去中心化设计之路
查看>>
BAT 经典算法笔试题 —— 磁盘多路归并排序
查看>>
一次完整的HTTP请求
查看>>
Nginx限制带宽
查看>>