Android 取消选中项时,Listview.GetCheckEditePositions()未返回正确的结果
我使用SparseBooleanArray获取listView中选中列表项的位置:Android 取消选中项时,Listview.GetCheckEditePositions()未返回正确的结果,android,Android,我使用SparseBooleanArray获取listView中选中列表项的位置: // lv is my listview final SparseBooleanArray checkedItems = lv.getCheckedItemPositions(); 当我选中一个列表项时,这可以正常工作。但当我从listview中取消选中一个项目时,它的大小并没有减小。它保持原样 让我解释一下发生了什么: 我首先选择3个listitems,我得到checkedItems的大小为3。但当我从列表中
// lv is my listview
final SparseBooleanArray checkedItems = lv.getCheckedItemPositions();
当我选中一个列表项时,这可以正常工作。但当我从listview中取消选中一个项目时,它的大小并没有减小。它保持原样
让我解释一下发生了什么:我首先选择3个listitems,我得到checkedItems的大小为3。但当我从列表中取消选中一项时,它的大小不会变为2。现在还是3点 需要做什么?请帮帮我 Stone将整数映射为布尔值。
size()
方法不返回包含的true
项目数,而是返回存储的项目数。其中一些项目可能是false
如果您想知道检查的项目数,可以在SparseBooleanArray上迭代,当检查状态更改时,可以通过调用
isItemChecked()
来跟踪检查的项目数,或者如果您使用的是API 11+(蜂巢),则可以调用getCheckedItemCount()
SparseBooleanArray不包含所有行的详细信息。键包含行的索引,如果选中,则值包含。如果选中一行,然后取消选中,则数组将包含该行的一个条目。因此,要处理此问题,您需要执行以下操作:
lSize=ObjectOfSparseBooleanArray.size()
获取大小for(inti=0;i
int lPos=ObjectOfSparseBooleanArray.keyAt(i);
boolean lIsChecked=ObjectOfSparseBooleanArray.Get(lPos);
要确认是否选中了特定项目,请使用
checkedItems.valueAt(i)
。布尔值指示项目在位置i的已选中状态。