其实你的问题归根到底,就是一个--由于CheckBox的存在,影响了ListView对点击事件的响应,那么你可以考虑在ListVIew的布局文件中加入android:descendantFocusability="",这样就可以避免子控件的影响了,用法你可以自己百度一下
解决方案 »
- 【怪问题】gprs 可以谷歌搜索,但不能访问我的服务端,用wifi就可以访问我的服务端,求解
- 两个Activity之间跳转问题?
- android jni 调用失败啊,求大神指导
- Circular dependencies cannot exist in RelativeLayout,这个错找不出来了
- forlinx_led_server.server.LedService; 这个库文件一般在什么目录中?
- android 页面跳转 新页面为屏幕向左移动出现?怎么办?急。。。
- android _时间轴
- android摄像头采集 + x264进行编码
- Android中使用listview出现数据紊乱
- KSOP2框架调用WebService出现double id Exception
- 双屏互动系统原理
- Fragment问题
我只要设置CheckBox的focusable=false就可以响应ListView的OnItemClicked事件了。但是我在想如何才能响应到CheckBox的Checked事件?
(2)你都说可以了自然就不是问题了。
(3)CheckBox属于ListView的item中的一项,只要得到对应item列表的数据,这都不是问题。
(4)第一个问题解决了,这当然不是问题。综上,你其实只是问了一个问题。
1.是CheckBox的onClick事件屏蔽了容器控件的事件,设置checkbox的focusable=false就可以解决。
2.其实我想问的是,勾选CheckBox时,如何监听到CheckBox的Checked事件,并且同时获取到ListView的Postion位置参数?实际操作时,我勾选CheckBox并不会触发ListView的OnItemClick事件的。
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
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
谢谢。ITBailei
我想我的问题应该是解决了。
因为是近期强上做android的应用,java与android的一些机制都不熟悉。我开始不会在BaseAdapter的getView()方法里去实现子控件监听事件,所以出现了这一系列疑问。在getView()方法里设置CheckBox的监听事件就好了,把position传递给CheckBox的监听处理就可以往下解决了。
1.android:focusable="false" <CheckBox
android:id="@+id/studyLibItemCheckBox"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingLeft="10dp"
android:text=""
android:focusable="false"
/>
2.BaseAdapter里的getView方法,里边添加CheckBox的事件监听@Override
public View getView(int position,View convertView,ViewGroup parent)
{
。
CheckBox checkBox=(CheckBox)relativeLayout.findViewById(R.id.studyLibItemCheckBox);
checkBox.setOnCheckedChangeListener(new CheckBoxListener(position));
。
}
我的问题是卡在了开始不会在getView方法里监听CheckBox子控件的事件。
我的问题是卡在了开始不会在getView方法里监听CheckBox子控件的事件。在getView中获取CheckBox后,给CheckBox设置标记setTag(),标记的值就是view的position值,然后在CheckBox的监听函数中获取这个标记getTag(),这样你不就知道对应的哪个item中的CheckBox被选中了吗?
我的问题主要是开始不知道怎么监听CheckBox的函数。不是获取哪个item的checkBox选中状态。
现在选中状态我是用了一个boolean数组来同步存储选中状态的。这么存储也可以的吧?
我的问题主要是开始不知道怎么监听CheckBox的函数。不是获取哪个item的checkBox选中状态。
现在选中状态我是用了一个boolean数组来同步存储选中状态的。这么存储也可以的吧?
是可以的
其实哪里有那么 复杂 你在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一下就可以了