关于ListView与CheckBox的结合(第二版.精华版)

关于通过ListView将数据绑定到复选框的问题的总结
问题来源:
1 选中第一页的第2,3个复选框,当翻到第二页的时候其相同位置也被选中
  解决思路:绝不能依靠复选框的被选中来删除黑名单号码(原因见上面分析),而依靠哪个数据被选中来删除黑名单.那么怎么知道这个数据  是否被选中呢?就是通过
            CheckBox的被选状态来提示用户的。所以说CheckBox只是起到一个显示作用!!
  解决办法:自定义SimpleAdapter类,重写getView()方法。而且借用了外部的全局的balckNumberIsCheckedMap保存了每个电话号码的状态,初始时均未被选中。
            重写getView()方法的目的:
            (1)实现数据的绑定checkBox.setText(blacknumber);//这里就是绑定的实质。把这个电话号码绑定到了ListView的这个checkbox上
            (2)为CheckBox赋予初始状态(初始状态均为未被选中)
            boolean isChecked=balckNumberIsCheckedMap.get(id);
            checkBox.setChecked(isChecked);
2 通过实现对于条目点击事件的监听,我们在点击条目的时候可知道是背后的那条数据被点击
  即HashMap<String,Object> itemHashMap=(HashMap<String, Object>) lv.getItemAtPosition(position);于是就可以修改此号码在balckNumberIsCheckedMap中的状态
  从而用此状态来决定复选框CheckBox的状态,这样的话点击几个条目去实现删除的时候遍历balckNumberIsCheckedMap查看哪些号码被选中,把选中的删除即可。
  这样带来了第二个问题:点击条目的时候,其实没有真正地点击到条目,而是点击了复选框CheckBox,因为复选框的优先级很高。 
  解决办法:在布局文件中使复选框不可以被点击,不可以被触摸,不可以获得焦点!!!于是在点击条目的时候就真的是在点击条目了!!!!!!!!
  于是可以这样处理条目点击事件:
  (1) 在点击的时候切换复选框状态checkBox.toggle();每点击条目都会切换此状态;然后得到复选框现在的状态即boolean itemIsCheck=checkBox.isChecked();
  (2) 得到当前被点击电话号码即HashMap<String,Object> itemHashMap=(HashMap<String, Object>) lv.getItemAtPosition(position);
  (3) 得到号码的ID即int blackNumberId=(Integer) itemHashMap.get("id");
  (4) 然后修改此号码在balckNumberIsCheckedMap中的状态即balckNumberIsCheckedMap.put(blackNumberId, itemIsCheck);
  这样就实现了形式与内容的统一,复选框的状态发生了变化,而且正确体现了实际情况。
  核心代码如下:
                checkBox.toggle();
                boolean itemIsCheck=checkBox.isChecked();//得到checkBox目前的状态
  HashMap<String,Object> itemHashMap=(HashMap<String, Object>) lv.getItemAtPosition(position);//得到ListView被点击条目所绑定的HashMap  
  int blackNumberId=(Integer) itemHashMap.get("id");
  balckNumberIsCheckedMap.put(blackNumberId, itemIsCheck);

  当我们执行删除的时候:其实就是去HashMap<Integer, Boolean> balckNumberIsCheckedMap看哪些数据被选中了,若被选中就删除它们。

 

 

这个总结源自于小项目——来电小精灵

时间: 2024-10-07 10:41:03

关于ListView与CheckBox的结合(第二版.精华版)的相关文章

《Android 开发入门与实战(第二版)》——6.1节什么是Activity

6.1 什么是Activity Android 开发入门与实战(第二版) Activity是Android四大组件之一,也是Android中最基本的模块之一.在官网中是这样介绍Activity的. 几乎所有的的Activity都是用来与用户交互的,因此Activity主要关注于视图窗体的创建(你可以通过setContentView(View)方法来放置你的UI),而且Activity对于用户来说通常都表现为全屏的窗体,当然,它们也能以其他的方式呈现,比如浮动窗体. 通俗一点来讲,我们可以把手机比

Windows Phone 7 界面设计与交互指南第二版中英译本

自微软揭开Windows Phone 7 以来,已经受到外界大量关注.其与众不同的Metro设计风格使它个性十足.而诺基亚与微软的合作也让大家拭目以待. 去年微软发布了第二版Windows Phone 7的界面设计与交互指南.笔者本以为这只是对此前发布的CTP(微软内部的预览版)版本做了些许补遗,于是打算快速做一个中文增订本.可是入手以后才发现这次的第二版增加了大量新内容,并且对之前的内容做了大幅修改. 于是两周之后,这本全新的中英对照的Windows Phone 7设计指南才得以问世.本指南详

用于计算四则混合运算表达式的递归函数第二版

用于计算四则混合运算表达式的递归函数第二版 更新于2007-08-28 by billow3(QQ:41965573) 注:本文在发表时稍作了排版,如果有因排版引起的代码工作不正常请来信告知我们 #include <math.h>#pragma warn -8060 // 屏蔽编译时的 Possibly incorrect assignment 警告AnsiString __fastcall Calc(String sExp){ // 计算不带变量的四则混合运算表达式(支持取整int和圆整ro

Android中ListView绑定CheckBox实现全选增加和删除功能(DEMO)_Android

ListView控件还是挺复杂的,也是项目中应该算是比较常用的了,所以写了一个小Demo来讲讲,主要是自定义adapter的用法,加了很多的判断等等等等-.我们先来看看实现的效果吧! 好的,我们新建一个项目LvCheckBox 我们事先先把这两个布局写好吧,一个是主布局,还有一个listview的item.xml,相信不用多说 activity_main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/

IBM-PC汇编语言程序设计(第二版)习题3.36疑似错题。

问题描述 IBM-PC汇编语言程序设计(第二版)习题3.36疑似错题. 原题干如下: 假设X和X+2单的内容为双精度p,Y和Y+2单元的内容为双精度数q,X和Y为低位字,试说明下列程序段做什么工作? MOV DX, X+2 MOV AX, X ADD AX, X ADC DX, X+2 CMP DX, Y+2 JL L2 JG L1 CMP AX, Y JBE L2 L1: MOV AX,1 JMP SHORT EXIT L2: MOV AX,2 EXIT: INT 20H 接下来是习题解: 此

listview中checkbox的多选与记录选择个数

今天继续和大家分享涉及到listview的内容.在很多时候,我们会用到listview和checkbox配合来提供给用户一些选择操作.比如在一个清单页面,我们需要记录用户勾选了哪些条目.这个的实现并不太难,但是有很多朋友来问我如何实现,他们有遇到各种各样的问题,这里就一并写出来和大家一起分享. ListView的操作就一定会涉及到item和Adapter,我们还是先来实现这部分内容. 首先,写个item的xml布局,里面放置一个TextView和一个CheckBox.要注意的时候,这里我设置了C

《Android 应用案例开发大全(第二版)》——6.7节获取第三方程序中可调用的窗口

6.7 获取第三方程序中可调用的窗口 Android开发权威指南(第二版) 第X问1 源代码目录:src/ch06/InvokeSinaWeibo 现在很多程序中使用的功能并未包含在程序本身,都是通过各种插件方式获得的其他程序的资源.例如,经常会使用到的"分享"功能就是调用了系统中所有可以处理某类资源的窗口来实现的,如果这样的窗口多于一个,就会显示一个选择列表. 如果想利用其他程序中的资源,首先要了解程序对外的接口.但很多程序并没有公开相应的接口,在这种情况下,就需要通过该程序的APK

《iOS开发指南》第二版 iOS7版-源码-样章-目录,感谢大家一直以来的支持

<iOS开发指南-从0基础到AppStore上线>第二版 iOS7版正式出版了 感谢大家一直以来的支持! 改版后采用全新的ios 7 api,详细介绍了最新的ios 7 开发相关的知识点,全部案例以iOS7版本SDK重新编译. 新增:iOS 7中文字排版和渲染引擎--Text Kit:      iOS6升级到iOS7遇到的问题与解决方法:      着重讲解iOS分层架构设计: 更新无处不在,更多新增内容请详细阅读本书 京东销售地址:http://item.jd.com/11419483.h

拒绝从入门到放弃_《Python 核心编程 (第二版)》必读目录

目录 目录 关于这本书 必看知识点 最后 关于这本书 <Python 核心编程 (第二版)>是一本 Python 编程的入门书,分为 Python 核心(其实并不核心,应该叫基础) 和 高级主题 两大部分,以 Python 2.x 作为主要演示版本,涵盖的知识面广,知识点较齐全,代码多且好理解,但对 Python 版本特性的内容太久远,不合时宜. 整体来说 Python 核心 部分是主要内容,高级主题 部分作为应用扩展内容.后半部分篇幅较短,内容不够深入,只到了解的层面,好在横向够广(每一个主