android listview中checkbox(购物车,批量操作)

最近在做购物车这里。 在做全选的时候 总会出现getchillat()空指针的问题,所以放弃了。

后来参考了网上的一些例子。

这篇:http://www.open-open.com/lib/view/open1343744786602.html 还算可以  在适配器中把view放入map中。 算是解决了一般的问题。

至于加入之后就可以看下面

check_goods_all和delete中的代码吧

这两个函数的最后都重新设置了适配器 因为我在调用cartAdapter.notifyDataSetChanged()的时候没有变化,具体也不太清楚。但是却是好用。

因为某些原因不能提供整个项目源代码。

[java] view
plain
copy

  1. public class Shopping_cart_listActivity extends Activity {  
  2.   
  3.     private Intent intent;  
  4.   
  5.     private ListView listView;  
  6.     private ArrayList<HashMap<String, Object>> listItem;  
  7.     // private SimpleAdapter listAdapter;  
  8.     private CartAdapter cartAdapter;  
  9.   
  10.     private CheckBox check_goods_all;  
  11.   
  12.     String[] goods_name = { "奶粉", "奶粉", "奶粉", "奶粉", "奶粉", "奶粉", "奶粉", "奶粉" };  
  13.     int[] goods_number = { 1, 2, 3, 4, 5, 6, 7, 8 };  
  14.     double[] goods_price = { 668.00, 668.00, 668.00, 668.00, 668.00, 668.00,  
  15.             668.00, 668.00 };  
  16.   
  17.     public void init() {  
  18.         intent = new Intent();  
  19.         listView = (ListView) findViewById(R.id.ListView_shopping_cart_list);  
  20.   
  21.         check_goods_all = (CheckBox) findViewById(R.id.check_goods_all);  
  22.         check_goods_all.setChecked(false);  
  23.   
  24.         // listAdapter = new SimpleAdapter(this, getData(),  
  25.         cartAdapter = new CartAdapter(getData(), this.getApplicationContext());  
  26.         listView.setAdapter(cartAdapter);  
  27.   
  28.     }  
  29.   
  30.     public ArrayList<HashMap<String, Object>> getData() {  
  31.         listItem = new ArrayList<HashMap<String, Object>>();  
  32.         for (int i = 0; i < 8; i++) {  
  33.             HashMap<String, Object> map = new HashMap<String, Object>();  
  34.             map.put("goods_info", goods_name[i]);  
  35.             map.put("shopping_cart_each_count", goods_number[i]);  
  36.             map.put("shopping_cart_each_price", goods_price[i]);  
  37.             // map.put("check_goods", false);  
  38.             listItem.add(map);  
  39.         }  
  40.         return listItem;  
  41.     }  
  42.   
  43.     @Override  
  44.     protected void onCreate(Bundle savedInstanceState) {  
  45.         super.onCreate(savedInstanceState);  
  46.         setContentView(R.layout.activity_shopping_cart_list);  
  47.         init();  
  48.   
  49.     }  
  50.   
  51.     @Override  
  52.     public boolean onCreateOptionsMenu(Menu menu) {  
  53.         // Inflate the menu; this adds items to the action bar if it is present.  
  54.         getMenuInflater().inflate(R.menu.activity_shopping_cart_list1, menu);  
  55.         return true;  
  56.     }  
  57.   
  58.     public void check_goods_all(View v) {  
  59.   
  60.         /* 
  61.          * for (int i = 0; i < listView.getCount(); i++) { 
  62.          * cartAdapter.getIsSelected().put(i, check_goods_all.isChecked()); } 
  63.          */  
  64.   
  65.         for (int i = 0; i < cartAdapter.getCount(); i++) {  
  66.             cartAdapter.isSelected.set(i, check_goods_all.isChecked());  
  67.         }  
  68.         listView.setAdapter(cartAdapter);  
  69.     }  
  70.   
  71.     public void delete(View v) {  
  72.   
  73.         int num = cartAdapter.isSelected.size();  
  74.   
  75.         ArrayList<Boolean> temp_isSelected = new ArrayList<Boolean>();  
  76.         ArrayList<HashMap<String, Object>> temp_listItem = new ArrayList<HashMap<String,Object>>();  
  77.   
  78.         int j = 0;  
  79.         for (int i = 0; i < num; i++) {  
  80.             if (!cartAdapter.isSelected.get(i)) {  
  81.                 temp_isSelected.add(j, false);  
  82.                 temp_listItem.add(j++, cartAdapter.list.get(i));  
  83.             }  
  84.         }  
  85.         cartAdapter.setIsSelected(temp_isSelected);  
  86.         cartAdapter.setList(temp_listItem);  
  87.         listView.setAdapter(cartAdapter);  
  88.         System.out.println("适配器中剩余:" + listItem.size());  
  89.         /* 
  90.          * for (int i = 0; i < listView.getCount(); i++) { RelativeLayout ll = 
  91.          * (RelativeLayout) listView.getChildAt(i);// 获得子级 CheckBox chkone = 
  92.          * (CheckBox) ll.findViewById(R.id.check_goods);// 从子级中获得控件 if 
  93.          * (chkone.isChecked()) { System.out.println(i + "------->"); 
  94.          * listItem.remove(i); listAdapter.notifyDataSetChanged(); } } 
  95.          */  
  96.   
  97.     }  
  98.   
  99.     public void return_to_before(View v) {  
  100.         intent.setClass(Shopping_cart_listActivity.this, FrameActivity.class);  
  101.         startActivity(intent);  
  102.         finish();  
  103.     }  
  104.   
  105.     public void settle(View v) {  
  106.         intent.setClass(Shopping_cart_listActivity.this,  
  107.                 BrandRankGoodsInfoActivity.class);  
  108.         startActivity(intent);  
  109.         finish();  
  110.     }  
  111.   
  112.     class CartAdapter extends BaseAdapter {  
  113.   
  114.         // 保存listview item的状态  
  115.         HashMap<Integer, View> map = new HashMap<Integer, View>();  
  116.         // 填充数据的list  
  117.         private ArrayList<HashMap<String, Object>> list;  
  118.         // 用来控制CheckBox的选中状况  
  119.         private ArrayList<Boolean> isSelected;  
  120.         // 上下文  
  121.         private Context context;  
  122.         // 用来导入布局  
  123.         private LayoutInflater inflater = null;  
  124.   
  125.         // 构造器  
  126.         public CartAdapter(ArrayList<HashMap<String, Object>> list,  
  127.                 Context context) {  
  128.             this.context = context;  
  129.             this.list = list;  
  130.             isSelected = new ArrayList<Boolean>();  
  131.             // 初始化数据  
  132.             initDate();  
  133.         }  
  134.   
  135.         // 初始化isSelected的数据  
  136.         private void initDate() {  
  137.             for (int i = 0; i < list.size(); i++) {  
  138.                 isSelected.add(i, false);  
  139.             }  
  140.         }  
  141.   
  142.         @Override  
  143.         public int getCount() {  
  144.             return list.size();  
  145.         }  
  146.   
  147.         @Override  
  148.         public Object getItem(int position) {  
  149.             return list.get(position);  
  150.         }  
  151.   
  152.         @Override  
  153.         public long getItemId(int position) {  
  154.             return position;  
  155.         }  
  156.   
  157.         @SuppressWarnings("unused")  
  158.         @Override  
  159.         public View getView(int position, View convertView, ViewGroup parent) {  
  160.             View view;  
  161.             ViewHolder holder = null;  
  162.             if (map.get(position) == null) {  
  163.                 // 获得ViewHolder对象  
  164.                 // 导入布局并赋值给convertview  
  165.                 LayoutInflater mInflater = (LayoutInflater) context  
  166.                         .getSystemService(Context.LAYOUT_INFLATER_SERVICE);  
  167.                 view = mInflater.inflate(R.layout.listview_shopping_cart, null);  
  168.                 holder = new ViewHolder();  
  169.                 holder.check_goods = (CheckBox) view  
  170.                         .findViewById(R.id.check_goods);  
  171.                 holder.shopping_cart_each_count = (EditText) view  
  172.                         .findViewById(R.id.shopping_cart_each_count);  
  173.                 holder.shopping_cart_each_price = (TextView) view  
  174.                         .findViewById(R.id.shopping_cart_each_price);  
  175.                 holder.goods_info = (TextView) view  
  176.                         .findViewById(R.id.goods_info);  
  177.                 final int p = position;  
  178.                 // 为view设置标签  
  179.                 // final boolean ischecked = holder.check_goods.isChecked();  
  180.                 holder.check_goods.setOnClickListener(new OnClickListener() {  
  181.                     @Override  
  182.                     public void onClick(View v) {  
  183.                         // TODO Auto-generated method stub  
  184.                         CheckBox cb = (CheckBox) v;  
  185.                         isSelected.set(p, cb.isChecked());  
  186.                         /* 
  187.                          * holder.check_goods.toggle(); isSelected.put(position, 
  188.                          * holder.check_goods.isChecked()); 
  189.                          */  
  190.   
  191.                     }  
  192.                 });  
  193.                 view.setTag(holder);  
  194.             } else {  
  195.                 // 取出holder  
  196.                 view = map.get(position);  
  197.                 holder = (ViewHolder) view.getTag();  
  198.             }  
  199.   
  200.             // 设置list中TextView的显示  
  201.             holder.goods_info.setText((String) list.get(position).get(  
  202.                     "goods_info"));  
  203.             holder.shopping_cart_each_price.setText(((Double) list  
  204.                     .get(position).get("shopping_cart_each_price")).toString());  
  205.             holder.shopping_cart_each_count.setText(((Integer) list.get(  
  206.                     position).get("shopping_cart_each_count")).toString());  
  207.             // 根据isSelected来设置checkbox的选中状况  
  208.             holder.check_goods.setChecked(isSelected.get(position));  
  209.             return view;  
  210.   
  211.         }  
  212.   
  213.         public void setList(ArrayList<HashMap<String, Object>> list) {  
  214.             this.list = list;  
  215.         }  
  216.           
  217.         public ArrayList<HashMap<String, Object>> getList() {  
  218.             return list;  
  219.         }  
  220.   
  221.         public ArrayList<Boolean> getIsSelected() {  
  222.             return isSelected;  
  223.         }  
  224.   
  225.         public void setIsSelected(ArrayList<Boolean> isSelected) {  
  226.             this.isSelected = isSelected;  
  227.         }  
  228.     }  
  229.   
  230.     class ViewHolder {  
  231.         public RelativeLayout linerlayout_shopping_cart;  
  232.         public ListView ListView_shopping_cart_list;  
  233.         public Button shopping_cart_reduce;  
  234.         public Button shopping_cart_add;  
  235.   
  236.         public EditText shopping_cart_each_count;  
  237.         public TextView shopping_cart_each_price;  
  238.         public TextView goods_info;  
  239.         public CheckBox check_goods;  
  240.     }  
  241.   
  242. }  
时间: 2024-11-03 10:05:31

android listview中checkbox(购物车,批量操作)的相关文章

android ListView中Checkbox实现单选,全选,全不选功能

@Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.group_list2); initBottomBar(); listView = (ListView) findViewById(R.id.groupListView); Group

Android编程之listView中checkbox用法实例分析_Android

本文实例讲述了Android编程之listView中checkbox用法.分享给大家供大家参考,具体如下: 我们经常会用到在listView中使用checkbox的情况.直接不回应用后会发现,ListView中的OnItemClickListener事件会和checkbox中的选择事件发生冲突,这个怎么处理呢.直接上代码. list_item.xml代码: <?xml version="1.0" encoding="utf-8"?> <Relati

Android编程之listView中checkbox用法实例分析

本文实例讲述了Android编程之listView中checkbox用法.分享给大家供大家参考,具体如下: 我们经常会用到在listView中使用checkbox的情况.直接不回应用后会发现,ListView中的OnItemClickListener事件会和checkbox中的选择事件发生冲突,这个怎么处理呢.直接上代码. list_item.xml代码: <?xml version="1.0" encoding="utf-8"?> <Relati

android listview中超链接不起作用

问题描述 android listview中超链接不起作用 今天看网上listview中实现超链接,自己做了下,超链接没反应,item点击事件也没反应,去掉listview时超链接正常,这是怎么回事?附上代码. @Override public View getView(int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub webViewItem webViewItem = n

android listview中怎么通过xml控制下一步的焦点

问题描述 android listview中怎么通过xml控制下一步的焦点 如图,是用listView,怎么在xml已经可以让左边的输入框点击下一步进入右边的输入框,但右边的输入框下一步会进入下一行右边的输入框,怎么设置可以下一步进入下一行左边的输入框啊,是希望能layout.xml设置,先谢谢了 解决方案 android ListView 焦点问题 解决方案二: xml里面没法定义,需要监听事件............ 解决方案三: 需要在java里监听事件

button 单选-android ListView中的Item有两行Button,要求实现单选效果,应该怎么做呢?

问题描述 android ListView中的Item有两行Button,要求实现单选效果,应该怎么做呢? 就是向这样的Button,在ListView的Item中,如果有两行,要能实现单选效果,应该怎么做呢?麻烦各位大神们说详细点~~ 解决方案 这个不用button,用radiobutton. 解决方案二: 我是在RadioGroup中嵌套了一个LinearLayout,这样就可以显示两行了,那么问题来了,radiogroup不能实现单选了,怎么办啊 解决方案三: 我是在RadioGroup中

android listview中如何将edittext内容保存

问题描述 android listview中如何将edittext内容保存 android listview中如何将edittext内容保存,用change事件时为什么我输入123,1,2,3 都有变化,我怎么才能获取最终的结果呢? 解决方案 一般来说呢,安卓里提供了SharedPreference这个类对象,所以你要想将EditText里的内容保存起来可以通过以下这种方式存储: SharedPreferences sp = getSharedPreferences("Content"

checkbox-如何监听listview中CheckBox复选框并且进行实时控制

问题描述 如何监听listview中CheckBox复选框并且进行实时控制 如何监听listview中CheckBox复选框并且进行实时控制 解决方案 如果你用的是C#,listview有itemcheck事件 解决方案二: 用ItemCheck或者ItemChecked事件.区别是后者在之后发生. 解决方案三: http://blog.csdn.net/codeeer/article/details/6732040

listview多任务下载-Android ListView中多任务下载是如何实现的(给点思路)

问题描述 Android ListView中多任务下载是如何实现的(给点思路) 最近在项目中有个多任务下载的功能,我把下载的类和方法全部都写好了,就是不知道多任务是如何实现的,网上有人说是写个下载管理器,还望各位大牛给说一下思路.类似于这个效果的..这个只是一个虚拟的更新进度条,没实现多任务下载 解决方案 直接使用多线程来下载不同任务,定时刷新进度.