请帮忙看看这个是什么问题,万分感谢。。。。在ListView中添加CheckBox的问题。 本帖最后由 hyrichard 于 2010-07-23 17:49:18 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你应该根据onItemClick中的view来获得对应的CheckBox 通过view的getparent和getchild方法来获取到对应的CheckBox 看了下楼主的布局,想不明白你那样布局是为什么?感觉你的布局有点问题。建议都用LinearLayout。 http://linux.chinaunix.net/bbs/forum-70-1.html android.R.layout.simple_list_item_multiple_choice加上ListView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE)可以实现列表复选 我自己重写了下adapter 然后跟踪了下getView()这个函数。发现一个问题就是,我每次点击某一项的时候,它都要通过getView()对画面进行更新。然后我看了下网上其它人写的一些adapter,里面都有个类似viewholder的东西。不明白是干啥子用的。还有就是没搞清楚一个问题,我在getView()里面Log.D一下。发现初始化的时候要调用getView()这个函数3*项数这么多次。然后每次点击其中某项 会调用2*项数这么多次。没搞懂。因为我如果捕获这个消息以后对checkbox进行处理。但是我处理完这个消息以后系统会对布局进行从新布局。。而且默认的simpleadapter貌似动态生成的checkbox的ID都一样的。所以通过getviewbyid()这个方法来处理的话 貌似会问题。不过我现在还没搞清楚问题出在什么地方。 我也出现同样的问题,不过我用的是ExpandableListView,求解 <CheckBox android:text="zhao" android:id="@+id/zhao_cb" android:layout_width="wrap_content" android:layout_height="wrap_content"></CheckBox><CheckBox android:text="qian" android:id="@+id/qian_cb" android:layout_width="wrap_content" android:layout_height="wrap_content"> </CheckBox><CheckBox android:text="song" android:id="@+id/song_cb" android:layout_width="wrap_content" android:layout_height="wrap_content"> </CheckBox><CheckBox android:text="li" android:id="@+id/li_cb" android:layout_width="wrap_content" android:layout_height="wrap_content"> </CheckBox> <Button android:text="获取checkbox的值" android:id="@+id/get_view_button" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button></LinearLayout> ListView中并不是有多少个Item就有多少个childView,如果你的手机能完整显示7个Item,则当前的ListView只有8个ChildView,什么意思呢?就是说getChildAt(0)和getChildAt(8)其实获取到的是同一个childView,所以上面的checkBox当然是同一个checkBox,所以当你把第一个Item的CheckBox勾上时,第9个Item的CheckBox也被勾上了,在来回滑动的过程中,可能顺序就乱了,就不遵循这个规律了。明白了吧,呼呼。我的手机当前能完整显示9个Item,看看Log,inview是onListItemClick的第2个参数:01-01 02:54:58.053: DEBUG/List_CheckBox(4741): onListItemClick, pos=001-01 02:54:58.055: DEBUG/List_CheckBox(4741): onListItemClick, id=001-01 02:54:58.057: DEBUG/List_CheckBox(4741): onListItemClick, inview=android.widget.RelativeLayout@4395819001-01 02:54:58.059: DEBUG/List_CheckBox(4741): onListItemClick, child=android.widget.RelativeLayout@4395819001-01 02:55:03.667: DEBUG/List_CheckBox(4741): onListItemClick, pos=1001-01 02:55:03.673: DEBUG/List_CheckBox(4741): onListItemClick, id=1001-01 02:55:03.677: DEBUG/List_CheckBox(4741): onListItemClick, inview=android.widget.RelativeLayout@4395819001-01 02:55:03.685: DEBUG/List_CheckBox(4741): onListItemClick, child=null看到了吧,被点击的是同一个view,而getChildAt(10) is NULL,所以楼主那个List往下滑时难道没报空指针异常?要想达到楼主需要的效果,有一种方法是自定义Adapter,在onListItemClick被点击时记录被点击的positon,然后getView时判断当前的position与记录的position是否匹配,匹配则checked。对了,最好给CheckBox加上两个属性: android:clickable="false" android:focusable="false"不然点击时不会触发onListItemClick(); 如果你的需求是点击Item就Check上,再给CheckBox加上android:clickable="false",这样就可以只在onListItemClick()中处理事件,而不用管CheckBox自身的变化了。 说错了,如果只能显示7项,getChildAt(8)返回的应该是null. 已经很久前的帖子了,自己也碰到这个问题,lmdy2001 说得对,adapter中添加一个记录每个checkbox是否被选中的map,然后在getview里面获取view的时候,判断一下,返回过去就可以了 遇到相同的问题,不知道能否把写的adapter的代码发给我看一下,谢谢![email protected] 横屏进入彩信,然后竖屏,actionbar显示异常 请教一个android网络应用的问题 android slidingdrawer 回弹效果 开发android程序用一个activity还是多个activity? 自定义Dialog的问题 真心求教 急急急!!!!!!!!! 请教Android进度条问题 手机支持图片、音频格式 请问一个关于ViewPager中Webview调用JS方法的问题。 安卓系统运行的垃圾过多问题如何解决? Androidstudio开发九宫格数字拼图1--8 android 电量使用列表中显示的总和超过100% 发了1个通知,为啥app退出以后收不到?
加上
ListView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE)可以实现列表复选
android:text="zhao"
android:id="@+id/zhao_cb"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</CheckBox>
<CheckBox
android:text="qian"
android:id="@+id/qian_cb"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</CheckBox>
<CheckBox android:text="song"
android:id="@+id/song_cb"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</CheckBox>
<CheckBox
android:text="li"
android:id="@+id/li_cb"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</CheckBox>
<Button
android:text="获取checkbox的值"
android:id="@+id/get_view_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</Button>
</LinearLayout>
就是说getChildAt(0)和getChildAt(8)其实获取到的是同一个childView,所以上面的checkBox当然是同一个checkBox,所以当你把第一个Item的CheckBox勾上时,第9个Item的CheckBox也被勾上了,在来回滑动的过程中,可能顺序就乱了,就不遵循这个规律了。
明白了吧,呼呼。我的手机当前能完整显示9个Item,看看Log,inview是onListItemClick的第2个参数:
01-01 02:54:58.053: DEBUG/List_CheckBox(4741): onListItemClick, pos=0
01-01 02:54:58.055: DEBUG/List_CheckBox(4741): onListItemClick, id=0
01-01 02:54:58.057: DEBUG/List_CheckBox(4741): onListItemClick, inview=android.widget.RelativeLayout@43958190
01-01 02:54:58.059: DEBUG/List_CheckBox(4741): onListItemClick, child=android.widget.RelativeLayout@4395819001-01 02:55:03.667: DEBUG/List_CheckBox(4741): onListItemClick, pos=10
01-01 02:55:03.673: DEBUG/List_CheckBox(4741): onListItemClick, id=10
01-01 02:55:03.677: DEBUG/List_CheckBox(4741): onListItemClick, inview=android.widget.RelativeLayout@43958190
01-01 02:55:03.685: DEBUG/List_CheckBox(4741): onListItemClick, child=null看到了吧,被点击的是同一个view,而getChildAt(10) is NULL,所以楼主那个List往下滑时难道没报空指针异常?要想达到楼主需要的效果,有一种方法是自定义Adapter,在onListItemClick被点击时记录被点击的positon,然后getView时判断当前的position与记录的position是否匹配,匹配则checked。
对了,最好给CheckBox加上两个属性:
android:clickable="false"
android:focusable="false"
不然点击时不会触发onListItemClick(); 如果你的需求是点击Item就Check上,再给CheckBox加上android:clickable="false",这样就可以只在onListItemClick()中处理事件,而不用管CheckBox自身的变化了。
lmdy2001 说得对,adapter中添加一个记录每个checkbox是否被选中的map,然后在getview里面获取view的时候,判断一下,返回过去就可以了