布局文件

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="fill_parent"
  4. android:layout_height="fill_parent"
  5. android:orientation="horizontal" >
  6. <TextView
  7. android:id="@+id/tv"
  8. android:layout_width="fill_parent"
  9. android:layout_height="wrap_content"
  10. android:layout_gravity="center_vertical" />
  11.  
  12. <LinearLayout
  13. android:id="@+id/line"
  14. android:layout_width="fill_parent"
  15. android:layout_height="50dp"
  16. android:layout_below="@+id/tv"
  17. android:orientation="horizontal" >
  18.  
  19. <Button
  20. android:id="@+id/bt_selectall"
  21. android:layout_width="80dp"
  22. android:layout_height="fill_parent"
  23. android:text="全选" />
  24. <Button
  25. android:id="@+id/bt_cancleselectall"
  26. android:layout_width="80dp"
  27. android:layout_height="fill_parent"
  28. android:text="反选" />
  29.  
  30. <Button
  31. android:id="@+id/bt_deselectall"
  32. android:layout_width="80dp"
  33. android:layout_height="fill_parent"
  34. android:text="取消选择" />
  35. </LinearLayout>
  36. <ListView
  37. android:id="@+id/lv"
  38. android:layout_width="fill_parent"
  39. android:layout_height="fill_parent"
  40. android:layout_below="@+id/line" />
  41.  
  42. </RelativeLayout>

二,对应的activity

  1. public class Ex_checkboxActivity extends Activity {
  2. private ListView lv;
  3. private MyAdapter mAdapter;
  4. private ArrayList<String> list;
  5. private Button bt_selectall;
  6. private Button bt_cancel;
  7. private Button bt_deselectall;
  8. private int checkNum; // 记录选中的条目数量
  9. private TextView tv_show;// 用于显示选中的条目数量
  10.  
  11. /** Called when the activity is first created. */
  12.  
  13. @Override
  14. public void onCreate(Bundle savedInstanceState) {
  15. super.onCreate(savedInstanceState);
  16. setContentView(R.layout.main);
  17. /* 实例化各个控件 */
  18. lv = (ListView) findViewById(R.id.lv);
  19. bt_selectall = (Button) findViewById(R.id.bt_selectall);
  20. bt_cancel = (Button) findViewById(R.id.bt_cancleselectall);
  21. bt_deselectall = (Button) findViewById(R.id.bt_deselectall);
  22. tv_show = (TextView) findViewById(R.id.tv);
  23. list = new ArrayList<String>();
  24. // 为Adapter准备数据
  25. initDate(); //加载15 条数据
  26. // 实例化自定义的MyAdapter
  27. mAdapter = new MyAdapter(list, this);
  28. // 绑定Adapter
  29. lv.setAdapter(mAdapter);
  30.  
  31. // 全选按钮的回调接口
  32. bt_selectall.setOnClickListener(new OnClickListener() {
  33. @Override
  34. public void onClick(View v) {
  35. // 遍历list的长度,将MyAdapter中的map值全部设为true
  36. for (int i = 0; i < list.size(); i++) {
  37. MyAdapter.getIsSelected().put(i, true);
  38. }
  39. // 数量设为list的长度
  40. checkNum = list.size();
  41. // 刷新listview和TextView的显示
  42. dataChanged();
  43. }
  44. });
  45.  
  46. // 反选按钮的回调接口
  47. bt_cancel.setOnClickListener(new OnClickListener() {
  48. @Override
  49. public void onClick(View v) {
  50. // 遍历list的长度,将已选的设为未选,未选的设为已选
  51. for (int i = 0; i < list.size(); i++) {
  52. if (MyAdapter.getIsSelected().get(i)) {
  53. MyAdapter.getIsSelected().put(i, false);
  54. checkNum--;
  55. } else {
  56. MyAdapter.getIsSelected().put(i, true);
  57. checkNum++;
  58. }
  59. }
  60. // 刷新listview和TextView的显示
  61. dataChanged();
  62. }
  63. });
  64.  
  65. // 取消按钮的回调接口
  66. bt_deselectall.setOnClickListener(new OnClickListener() {
  67. @Override
  68. public void onClick(View v) {
  69. // 遍历list的长度,将已选的按钮设为未选
  70. for (int i = 0; i < list.size(); i++) {
  71. if (MyAdapter.getIsSelected().get(i)) {
  72. MyAdapter.getIsSelected().put(i, false);
  73. checkNum--;// 数量减1
  74. }
  75. }
  76. // 刷新listview和TextView的显示
  77. dataChanged(); //刷新adapter
  78. }
  79. });
  80. // 绑定listView的监听器
  81. lv.setOnItemClickListener(new OnItemClickListener() {
  82.  
  83. @Override
  84. public void onItemClick(AdapterView<?> parent, View view, int position,
  85. long id) {
  86. // 取得ViewHolder对象,这样就省去了通过层层的findViewById去实例化我们需要的cb实例的步骤
  87. ViewHolder holder = (ViewHolder) view.getTag();
  88. // 改变CheckBox的状态
  89. holder.cb.toggle();
  90. // 将CheckBox的选中状况记录下来
  91. MyAdapter.getIsSelected().put(position, holder.cb.isChecked());
  92. // 调整选定条目
  93. if (holder.cb.isChecked() == true) {
  94. checkNum++;
  95. } else {
  96. checkNum--;
  97. }
  98. // 用TextView显示
  99. tv_show.setText("已选中" + checkNum + "项");
  100. }
  101. });
  102. }
  103. // 初始化数据
  104. private void initDate() {
  105. for (int i = 0; i < 15; i++) {
  106. list.add("data" + " " + i);
  107. }
  108. }
  109. // 刷新listview和TextView的显示
  110. private void dataChanged() {
  111. // 通知listView刷新
  112. mAdapter.notifyDataSetChanged();
  113. // TextView显示最新的选中数目
  114. tv_show.setText("已选中" + checkNum + "项");
  115. };
  116. }

三,  里面的adapter

  1. public class MyAdapter extends BaseAdapter {
  2. // 填充数据的list
  3. private ArrayList<String> list;
  4. // 用来控制CheckBox的选中状况
  5. private static HashMap<Integer, Boolean> isSelected;
  6. // 上下文
  7. private Context context;
  8. // 用来导入布局
  9. private LayoutInflater inflater = null;
  10.  
  11. // 构造器
  12. public MyAdapter(ArrayList<String> list, Context context) {
  13. this.context = context;
  14. this.list = list;
  15. inflater = LayoutInflater.from(context);
  16. isSelected = new HashMap<Integer, Boolean>();
  17. // 初始化数据
  18. initDate(); //都设置为false
  19. }
  20.  
  21. // 初始化isSelected的数据
  22. private void initDate() {
  23. for (int i = 0; i < list.size(); i++) {
  24. getIsSelected().put(i, false);
  25. }
  26. }
  27.  
  28. @Override
  29. public int getCount() {
  30. return list.size();
  31. }
  32.  
  33. @Override
  34. public Object getItem(int position) {
  35. return list.get(position);
  36. }
  37.  
  38. @Override
  39. public long getItemId(int position) {
  40. return position;
  41. }
  42.  
  43. @Override
  44. public View getView(int position, View convertView, ViewGroup parent) {
  45. ViewHolder holder = null;
  46. if (convertView == null) {
  47. // 获得ViewHolder对象
  48. holder = new ViewHolder();
  49. // 导入布局并赋值给convertview
  50. convertView = inflater.inflate(R.layout.listviewitem, null);
  51. holder.tv = (TextView) convertView.findViewById(R.id.item_tv);
  52. holder.cb = (CheckBox) convertView.findViewById(R.id.item_cb);
  53. // 为view设置标签
  54. convertView.setTag(holder);
  55. } else {
  56. // 取出holder
  57. holder = (ViewHolder) convertView.getTag();
  58. }
  59. // 设置list中TextView的显示
  60. holder.tv.setText(list.get(position));
  61. // 根据isSelected来设置checkbox的选中状况
  62. holder.cb.setChecked(getIsSelected().get(position));
  63. return convertView;
  64. }
  65.  
  66. public static HashMap<Integer, Boolean> getIsSelected() {
  67. return isSelected;
  68. }
  69. //获得map的
  70. public static void setIsSelected(HashMap<Integer, Boolean> isSelected) {
  71. MyAdapter.isSelected = isSelected;
  72. }
  73.  
  74. public static class ViewHolder {
  75. TextView tv;
  76. CheckBox cb;
  77. }
  78. }

adapter下的item 的布局文件

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="fill_parent"
  4. android:layout_height="fill_parent"
  5. android:orientation="horizontal" >
  6.  
  7. <TextView
  8. android:id="@+id/item_tv"
  9. android:layout_width="0dp"
  10. android:layout_height="wrap_content"
  11. android:layout_gravity="center_vertical"
  12. android:layout_weight="1" />
  13.  
  14. <CheckBox
  15. android:id="@+id/item_cb"
  16. android:layout_width="wrap_content"
  17. android:layout_height="wrap_content"
  18. android:clickable="false"
  19. android:focusable="false" // 注意: 这里去除checkbox的焦点
  20. android:focusableInTouchMode="false"
  21. android:gravity="center_vertical" />
  22.  
  23. </LinearLayout>

ListView里面嵌套CheckBox的更多相关文章

  1. listview中item 有checkbox多选防止滑动 listview页面 出现checkbox错位问题

    checkbox点击切换背景 <CheckBox android:id="@+id/checkbox" android:layout_width="40dp&quo ...

  2. android listView多层嵌套listView显示不全问题

    最近在做项目,需要用到listVIew多层嵌套listVIew的需求,先发现已下两个处理办法比较好用 第一种: public class ListViewNesting extends ListVie ...

  3. ListView中嵌套GridView点击事件

    做一个项目时,需要在ListView中嵌套GridView,因为ListView的每个条目中不一定出现GridView,那么问题来了,添加GridView的Item的点击事件后,有GridView出现 ...

  4. listview 嵌套checkbox响应item点击和button点击事件

    参考文档 http://www.eoeandroid.com/forum.php?mod=viewthread&tid=182280 一.主要要点 1. CheckBox的优先级比item高. ...

  5. android 之 ListView 里面嵌套 GridView 遇到的问题及其解决方法。

    我们直接入主题.所有问题例子请参照下图 1,怎样使图片具有点击事件? 答: 解决方法: 在你的BaseAdapter里面不要设置下面这三个东西,然后再设置GridView的onItemClick. g ...

  6. ListView 里面嵌套 GridView 遇到的问题及其解决方法。

    我们直接入主题.所有问题例子请参照下图 1,怎样使图片具有点击事件? 答: 解决方法: 在你的BaseAdapter里面不要设置下面这三个东西,然后再设置GridView的onItemClick. g ...

  7. Android listview中使用checkbox

    最近比较忙碌,我也不知道忙的什么东西,打算写的博客写了一半,还没写完,今天先扯一扯项目中遇到的一个问题,一方面防止以后遇到这个问题忘记如何解决,另一方面希望可以提供给遇到同样问题的朋友一个思路.下面开 ...

  8. Android如何在ListView中嵌套ListView

    前几天因为项目的需要,要在一个ListView中放入另一个ListView,也即在一个ListView的每个ListItem中放入另外一个ListView.但刚开始的时候,会发现放入的小ListVie ...

  9. 【转】listView中,checkBox的显示和隐藏

    原文网址:http://www.cnblogs.com/vicma/p/3460500.html 在listView中,每个item都有一个ChexBox,当显示的时候在listView外面设置一个按 ...

随机推荐

  1. 分享知识-快乐自己:HashMap 与 HashTable 的区别

    特性: HashMap 与 Hashtable 的分析: 1):HashMap简介 1.底层数组+链表实现,可以存储null键和null值,线程不安全 2.HashMap 不是线程安全的 3.Hash ...

  2. java中base64

    // 将 s 进行 BASE64 编码 public static String getBASE64(String s) { if (s == null) return null; return (n ...

  3. lr中检查点的使用web_find()和web_reg_find()的区别

    web_find()和web_reg_find()的区别:1. 这两个函数函数类型不同,web_find()是普通函数,web_reg_find()是注册函数;2. VU run time设置中的 “ ...

  4. deep learning (六)logistic(逻辑斯蒂)回归中L2范数的应用

    zaish上一节讲了线性回归中L2范数的应用,这里继续logistic回归L2范数的应用. 先说一下问题:有一堆二维数据点,这些点的标记有的是1,有的是0.我们的任务就是制作一个分界面区分出来这些点. ...

  5. 唯一id UUID

    public static String getUUID() { String s = UUID.randomUUID().toString(); return s.substring(0, 8) + ...

  6. RecycleView出现折叠效果--第三方开源--SectionedExpandableGridRecyclerView

    下载地址:https://github.com/ddwhan0123/SectionedExpandableGridRecyclerView/archive/master.zip 具体见源码

  7. Unity自带寻路Navmesh

    自带寻路Navmesh的三大组件: 1.Nav Mesh Agent:主要挂在寻路物体上 2.Off Mesh Link:实现区域转移功能(例如,有时不一定只是在地面上进行寻路,可能有些高高的平台,平 ...

  8. Java进阶知识点2:看不懂的代码 - 协变与逆变

    一.背景 要搞懂Java中的协办与逆变,不得不从继承说起,如果没有继承,协变与逆变也天然不存在了. 我们知道,在Java的世界中,存在继承机制.比如MochaCoffee类是Coffee类的派生类,那 ...

  9. NOI模拟赛 #4

    好像只有一个串串题可以做... 不会 dp 和数据结构啊 QAQ 10 + 20 + 100 = 130 T1 一棵树,每个点有一个能量的最大容量 $l_i$ 和一个增长速度 $v_i$,每次可以选一 ...

  10. centos7 showdoc 手动安装部署

    1.从 https://github.com/star7th/showdoc 下载压缩包: 2.解压文件,然后将showdoc-master下面的文件上传至服务器对应的文件下面: 3.在浏览器中输入 ...