请问下像内置mail应用那样的ListView带CheckBox的效果怎么做?

============问题描述============

效果说明:

就像android系统内置的mail应用那样的列表

1.如图所示,每一个Item都是左边一个CheckBox,右边是内容。

2.如果单击左边CheckBox区域的话呢,会选中该项的CheckBox,不会打开内容。

3.如果单击右边的文本内容区域的话,会打开一个新的Activity,展示邮件正文内容。

4.通过多选后,可以一次批量对列表项进行删除操作。

这个效果,我想了下,没有想到好的头绪。

我自己定义了一个Item.xml,设置好checkBox和textView,自己继承了BaseAdapter创建了对应的Adapter适配器。

问题有以下:

1.设置CheckBox的focusable为false了,不然ListView监听不到OnItemClick事件。

2.可以监听到ListView的OnItemClick事件的,单击打开新的内容Activity自然可以。

3.问题在于,我怎么能监听到CheckBox的选中/取消选中的事件,并且监听到这个选中事件后,需要把CheckBox在列表中所在的位置记录下来,保存到一个索引列表中去,记录下来每个项的选中状态。

4.如果在ListView的OnItemClick事件中,对CheckBox项进行选中状态修改固然可以,但是单击右侧内容区域时,会打开新的Activity了。如何控制根据单击区域来设定是CheckBox响应,还是打开新Activity?

============解决方案1============

其实你的问题归根到底,就是一个--由于CheckBox的存在,影响了ListView对点击事件的响应,那么你可以考虑在ListVIew的布局文件中加入android:descendantFocusability="",这样就可以避免子控件的影响了,用法你可以自己百度一下

============解决方案2============

引用 6 楼 ITbailei 的回复:

Quote: 引用 5 楼 txfast 的回复:

Quote: 引用 4 楼 ITbailei 的回复:

(1)这个涉及到事件分发机制的原理,因为CheckBox的onThoch事件会屏蔽掉父布局的单击事件,所以你可以屏蔽掉对应的事件,你可以google一下,有很多解决方案。

(2)你都说可以了自然就不是问题了。

(3)CheckBox属于ListView的item中的一项,只要得到对应item列表的数据,这都不是问题。

(4)第一个问题解决了,这当然不是问题。

综上,你其实只是问了一个问题。

1.是CheckBox的onClick事件屏蔽了容器控件的事件,设置checkbox的focusable=false就可以解决。

2.其实我想问的是,勾选CheckBox时,如何监听到CheckBox的Checked事件,并且同时获取到ListView的Postion位置参数?

实际操作时,我勾选CheckBox并不会触发ListView的OnItemClick事件的。

一样的,只要你妥善处理好这2者事件的相互影响,就不会出现相互屏蔽的事情,可以参考博客http://cache.baiducontent.com/c?m=9d78d513d9921bf801bdc9341a16a671692797124ac0d165218fd20e84652b051c31a6ac26520774d8d20c6716df4f4b9df42235775d2feddd8eca5ddcc88f357bcf6f6e2d5bc71859c419d89b18789437902da8f243a0adf045c2f38dcedf5357cf570f7a87f69c5a774e8c30ae&p=8b2a9702938c1db41fbd9b7e0d1388&newp=996ac64ad4934eaf58e8cf27584e88231610db2151ddd116&user=baidu&fm=sc&query=chekbox+%BA%CDListView%B9%B2%B4%E6&qid=971ce8bb0003e68f&p1=2

正确的引用地址是http://blog.csdn.net/gyflyx/article/details/6567701

============解决方案3============

看了 楼上的 回答真是五花八门 什么都有啊。。。

其实哪里有那么 复杂 你在getview 里面 find 到你的checkBox 然后给他设置他本身的onCheckChangeListener的监听,在adapter里面写个接口,然后在checkBox的监听里面把状态回调,在activity里面实现你的自定义接口,拿到回调的监听返回的状态(观察者模式)。 你本身的listview有自带的onItemClickListener,你在给listview设这个自带的item监听,就可以达到你要的效果了

还有,至于你说的记录状态的问题,跟这些都无关,你给每个position对应的数据(Bean)加个属性(其实就是加个成员变量,比如isCheck),当你getView里面的CheckBox监听触发的时候,将数据对应的isCheck这个属性设置为CheckBox的当前状态就可以了。 你getView里面的find到的CheckBox的状态都根据对应的数据的isCheck这个状态来设置不就好了嘛。然后当你要删除一个或多个选中的 Item其实就相当于在activity里面对触发删除的事件进行监听,并查看数据中那些数据时选中的,将这些数据从数据集合中删除,notify一下就可以了

时间: 2024-08-03 23:58:31

请问下像内置mail应用那样的ListView带CheckBox的效果怎么做?的相关文章

windows下vscode内置的终端改为linux终端

windows下vscode内置的终端改为linux终端 1: 安装git 相信看这文章的大伙知道怎么安装git,不知道有没有注意到,windows版的git,附带了一个linux终端模拟器,在安装目录: 2: 打开配置文件 依次点:文件-> 首选项->设置,来打开VS Code的配置界面 如果你看到的是一个json文件,那么就不用做后面这步. 点击右侧的这个ICON: 3. 添加以下配置 其中有两行请改为你自己的安装路径 "editor.detectIndentation"

Win7下的内置FTP组件的设置详解

在局域网中共享文件,FTP是比较方便的方案之一.Win7内部集成了FTP,只是设置起来颇费一番功夫.着文以记之. 一.安装FTP组件 由于Win7默认没有安装FTP组件.故FTP的设置第一步就是安装FTP组件 点击:控制面板—>程序和功能—>打开或关闭Windows功能.勾选“FTP服务器”及“FTP服务”“FTP扩展性”,点击“确定”,安装FTP组件.如下图所示 二.添加FTP站点 点击:控制面板—>管理工具.选中“Internet信息服务(IIS)管理器”,如图 双击“Interne

liunx 内置mail 发送邮件

 邮件配置文件/etc/mail.rc  [[email protected] ~]# vim /etc/mail.rc #添加如下内容 set [email protected] set smtp=smtp.126.com set [email protected] set smtp-auth-password=xxx set smtp-auth=login ---说明 from:对方收到邮件时显示的发件人 smtp:指定第三方发邮件的smtp服务器地址 set smtp-auth-user:

OX S系统下使用内置的PHP

OX S系统中预装了PHP,默认关闭状态.开启OX S系统中的PHP: step1:打开终端,输入sudo nano /etc/apache2/httpd.conf step2:要求输入密码 step3:control+W(搜索),搜索php,找到:#LoadModule php5_module libexec/apache2/libphp5.so,将前面的#去掉,Control+O保存,Control+X退出. step4:回到终端 输入:sudo apachectl restart,这时候P

linux下awk内置函数的使用(split/substr/length)

一.split 初始化和类型强制  awk的内建函数split允许你把一个字符串分隔为单词并存储在数组中.你可以自己定义域分隔符或者使用现在FS(域分隔符)的值.格式: split (string, array, field separator)   split (string, array)  -->如果第三个参数没有提供,awk就默认使用当前FS值. 例1:替换分隔符 time="12:34:56" out=`echo $time | awk '{split($0,a,&qu

C#内置的事件机制和Unity3D姻缘

最近因为项目,也因为一些其他事情而导致学习的停止,抽个空来记录下C#内置的事件在Unity3D中的使用. 我需要让一个物体对鼠标悬停做出事件的响应的情况下,我们通常会创建一个继承MonoBehaviour的脚本然后挂到该物体上,然后为该脚本创建OnMouseOver方法,例如我们需要悬停来改变物体颜色,可能会这样写. using UnityEngine; using System.Collections; public class ChangeColor : MonoBehaviour { vo

内置函数的基本作用介绍

python中内置了很多的函数,现大致说下这些内置函数的作用: 函数(运算相关) 例子 作用说明                abs() abs(-1)/abs(1) 取绝对值 max() max([1,2,3])  取最大值 len() len('abc')/len([1,2,3])/len((1,2,3,))  序列长度 divmod() divmod(5,2)  取模  pow() pow(2,3,4)  相乘 round() round(1)  浮点数  函数()      calla

PHP内置服务器

PHP在安装的时候会内置了服务器的功能,我们在使用的过程中如果只是调试,可以选择启动PHP内置的服务器,下面是windows下PHP内置服务器的启动步骤: 1.将php的D:\phpStudy\php54(即php.exe所在目录)添加到环境变量path中. 2.打开dos命令窗口输入(其中D:\phpStudy\WWW\aaa为项目目录) php -S localhost:80 -t D:\phpStudy\WWW\aaa 3.服务开启成功(运行期间该窗口不能关闭) C:\Users\DELL

(列表推导式,生成器表达式,内置函数)

一,列表生成式 示例一: 生成1~100的列表 生成1-100的列表 1 2 3 4 5 li = [] for i in range(1,101):     li.append(i) print(li) 执行输出: [1,2,3...] 生成python1期~11期li = []for i in range(1,12): li.append('python{}期'.format(i))print(li) 执行输出: ['python1期', 'python2期', 'python3期'...]