首先说问题所在:关键问题是按下checkbox的时候不能知道这个checkbox究竟是哪个checkbox,即不能获取其具体的位置,不能获得其对应的ListView Item。也就是关键是要把item跟checkbox一一对应起来。
我想到了两种解决办法:
第一种办法:
.继承checkbox,添加一个表示自身position的成员。在adapter初始化的时候,在getView这个函数里面初始化这个值。然后使用这个我们自己定义的checkbox。
缺点:没有通用性,如果其他控件也有这种需求呢?岂不是也要定义一堆的自定义控件
第二种办法:
这是一种间接实现的办法。为listview添加android:descendantFocusability="blocksDescendants"属性,然后设置checkbox为clickable=false,fousable=false,屏蔽其所有事件,然后响应item的单击事件,在里面设置checkbox的状态。这个办法连自定义adapter的功夫都省去了,直接用SimpleAdapter。
缺点:item内只有一个checkbox需要响应的时候才能使用该方法