我有自己的布局和CustomCursorAdapter的ListView。每一行都有自己的复选框。所以......很明显,在滚动过程中,复选框会失去它们的状态。我找到的唯一东西是Android save Checkbox State in ListView with Cursor Adapter,但那里没有答案。还有一个问题。我的CustorArrayAdapter也有同样的问题。我使用SparseBooleanArray来保持复选框的状态,解决了这个问题。它工作得很好。但每次滚动都会调用onCheckedChanged。这正常吗?问题是我的列表视图描述了警报元素,并且定期调用(onCheckedChanged的)启动/停止警报。很多不必要的操作。
8条答案
按热度按时间bvn4nwqk1#
我的
ListView
和CheckBox
也有类似的问题,我做了什么来摆脱这个问题:false
,表示尚未选中CheckBox。请参阅以下代码片段:
zhte4eai2#
当列表视图中有可检查的项时,有一些问题。我建议使用以下链接:
http://tokudu.com/2010/android-checkable-linear-layout/
我觉得这和你想要的很接近。
pgx2nnw83#
我也面临着类似的问题,所以经过大量的阅读我解决了这个问题这样:
这里我在getView()上做的是取消选中所有的复选框,然后根据对应的文本视图手动再次选中那些需要选中的复选框。因此,如果用户在选中第一个复选框后向下滚动,视图中的所有复选框都将被取消选中,如果他再次向上滚动,那么所有的复选框都将被取消选中,但他之前单击的复选框将再次被选中。
iq0todco4#
我决定尝试使用setViewBinder方法。Сheckboxes的状态存储在SparseBooleanArray中。Сheckbox的状态随着您单击checkbox本身以及整个单元格而变化。
我的行:|文字检视|核取方块|
0tdrvxhp5#
我不明白,为什么不可能(像在HTML中那样)在XML中将ViewElement定义为数组。即:
并将一个值存储在int it [true| false]。这将使生活更容易,而不是使用复杂的源frickle。此外,数据(即当从横向切换到纵向)应该由android保存,而不会丢失。
也许在API 117中,版本toothscratch...
ie3xauqp6#
(sry,还不能评论)-关于Vikas Patidar的答案,这对我来说很有效-在使用异步加载(像使用Loader)时要注意,因为适配器的构造函数中的getCount将为零。
最后会出现索引错误(因为ArrayList永远不会被填充)。使用SparseBooleanArray而不是ArrayList,它也可以用于异步加载。
j5fpnvbx7#
这里可能有点晚了,为了总结一下Vikas Patidar's的答案,这里是一个完整的实现,它使用了
bindView
方法,适用于那些使用CursorAdapter的人:注意:
final int position = cursor.getPosition();
有意义!mkh04yzy8#
您可以通过使用Listview的内置多选模式来为自己节省很多麻烦。
(列表视图.选择模式_多个);