自定义带单选框的SimpleCursorAdapter(ListView中增加CheckBox的OnClick响应)

最近在实现一个邮件系统,想仿照Android自带的邮件列表界面,在ListView中显示如下界面

image

通过Android自带的Hierarchy Viewer分析得知,该ListItem包括:

  • 最左边的View(红色)区分不同的邮箱
  • 左边的复选框ImageView 恩。。不知为啥不用CheckBox实现
  • 中间三个TextView 显示邮件标题 内容及日期
  • 右边的复选框ImageView 星标,也是用ImageView 实现的

恩·· 比较复杂的一个结构,Android对于ListView提供了几种Adapter,不过结构都比较简单、功能也比较少

实现上面的结构还是的自己改进Adapter,首先使用XML构造用于显示ListItem的XML文件

image

接下来就是如何编写相应的代码响应各个部分了

1、星标 直接由bool型设定

对于Checkbox,如果直接使用CursorAdapter的方法将boolean型对应到Checkbox上则会显示在Checkbox的Text部分上,而不是对应星标的显示与否。因此我们需要自己实现一个ViewBinder,该方法在转换时遇到Checkbox,则尝试将bool型转换为IsCheck设定。

首先继承一个SimpleCursorAdapter,在初始化时使用setViewBinder,指定我们自己的类型转换函数。






首先判断是否是一个Checkbox类型,然后判断能否转换为true或者false,若可以则设置CheckBox的Checked属性。

若不能转换为true或者false则返回false,由Adapter尝试其他方法转换。

在一个ViewBinder里可以增加多个类型判断,之需要满足,转换成功返回true,失败返回false即可,遇到false,Adapter会尝试其他可能转换,如果最终仍未匹配到合适转换,则抛出异常。

2、星标 的事件响应

为了增加星标的事件响应,查找了不少资料,通过几次尝试终于找到了一个合适的设置方法,getView在ListView中负责每个ListItem的结构,修改返回的View增加事件响应即可做到给每个ListItem设定相应的事件。




由于只需要增加星标的响应,ListItem中的文字显示由父类完成即可,因此先调用了super .getView(position, convertView, parent); 获得显示的View类,然后在该View中查找对应的控件增加事件响应即可。

3、ListItem自身的事件响应

这个就很简单了,对于ListView增加响应即可,唯一需要注意的是,需要先给ListItem中的CheckBox、Button等控件设置Focusable为false,否则会因为CheckBox或者Button占据了ListItem的焦点 而不响应ListItem的点击事件。

基本这样一个类似的结构就可以产生了,接口仍然和原来的SimpleCursorAdapter,增加了几个自己的处理方式,基本实现类似自带邮件的列表效果,不过目前还在考虑每个CheckBox如何和他所在的Position关联在一起,考え中。。。

关于Adapter可以参考下:Adapter的体系http://hi.baidu.com/studymemo/blog/item/d9c3c518a7907972dbb4bd40.html


 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值