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

解决方案 »

  1.   

    这个有demo的,其实就在每个item里面加一个checkbox,再定义一个公用变量map<"check",boolean>通过全局变量map来获取是否勾选
      

  2.   


    我只要设置CheckBox的focusable=false就可以响应ListView的OnItemClicked事件了。但是我在想如何才能响应到CheckBox的Checked事件?
      

  3.   

    (1)这个涉及到事件分发机制的原理,因为CheckBox的onThoch事件会屏蔽掉父布局的单击事件,所以你可以屏蔽掉对应的事件,你可以google一下,有很多解决方案。
    (2)你都说可以了自然就不是问题了。
    (3)CheckBox属于ListView的item中的一项,只要得到对应item列表的数据,这都不是问题。
    (4)第一个问题解决了,这当然不是问题。综上,你其实只是问了一个问题。
      

  4.   


    1.是CheckBox的onClick事件屏蔽了容器控件的事件,设置checkbox的focusable=false就可以解决。
    2.其实我想问的是,勾选CheckBox时,如何监听到CheckBox的Checked事件,并且同时获取到ListView的Postion位置参数?实际操作时,我勾选CheckBox并不会触发ListView的OnItemClick事件的。
      

  5.   


    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
      

  6.   


    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
      

  7.   


    谢谢。ITBailei
    我想我的问题应该是解决了。
    因为是近期强上做android的应用,java与android的一些机制都不熟悉。我开始不会在BaseAdapter的getView()方法里去实现子控件监听事件,所以出现了这一系列疑问。在getView()方法里设置CheckBox的监听事件就好了,把position传递给CheckBox的监听处理就可以往下解决了。
      

  8.   

    把这个问题我认为关键的一些地方的代码贴出来吧,让大家少走弯路是好事
    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));
            。
    }
      

  9.   

    2楼的android:descendantFocusability="",这个属性,我网上搜索答案时,有很多文章都提到了这个属性,不过这个目的主要是避免单击CheckBox使得ListView的OnItemClick事件不能响应。我一开始就说明了,我设置CheckBox的focusable属性就可以使得ListView的OnItemClick事件能够正确响应,所以我就没有试这个属性了。
    我的问题是卡在了开始不会在getView方法里监听CheckBox子控件的事件。
      

  10.   

    2楼的android:descendantFocusability="",这个属性,我网上搜索答案时,有很多文章都提到了这个属性,不过这个目的主要是避免单击CheckBox使得ListView的OnItemClick事件不能响应。我一开始就说明了,我设置CheckBox的focusable属性就可以使得ListView的OnItemClick事件能够正确响应,所以我就没有试这个属性了。
    我的问题是卡在了开始不会在getView方法里监听CheckBox子控件的事件。在getView中获取CheckBox后,给CheckBox设置标记setTag(),标记的值就是view的position值,然后在CheckBox的监听函数中获取这个标记getTag(),这样你不就知道对应的哪个item中的CheckBox被选中了吗?
      

  11.   


    我的问题主要是开始不知道怎么监听CheckBox的函数。不是获取哪个item的checkBox选中状态。
    现在选中状态我是用了一个boolean数组来同步存储选中状态的。这么存储也可以的吧?
      

  12.   


    我的问题主要是开始不知道怎么监听CheckBox的函数。不是获取哪个item的checkBox选中状态。
    现在选中状态我是用了一个boolean数组来同步存储选中状态的。这么存储也可以的吧?
    是可以的
      

  13.   

    http://blog.csdn.net/it_talk/article/details/38926641
      

  14.   

    看了 楼上的 回答真是五花八门 什么都有啊
    其实哪里有那么 复杂 你在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一下就可以了