我使用 SparseBooleanArray 来获取listView中已检查列表项的位置:
// lv is my listview
final SparseBooleanArray checkedItems = lv.getCheckedItemPositions();
检查列表项时这很好用。但是当我从listview取消选中一个项目时,它的大小并没有减少。它保持不变。
让我解释一下发生了什么:
我首先选择3个列表项,然后我将 checkedItems 的大小设为3.但是当我从列表中取消选中一个项目时,它的大小不会变为2.它仍然是3.
需要做什么?请帮助我。
石头答案 0 :(得分:13)
SparseBooleanArray
将整数映射到布尔值。 size()
方法不返回包含的true
项的数量,它返回存储的项数。其中一些项目可能是false
。
如果您想知道所检查的项目数,您可以遍历SparseBooleanArray,您可以通过在选中状态更改时调用isItemChecked()
来跟踪已检查项目的数量,或者如果您使用的是API 11+( Honeycomb)你可以致电getCheckedItemCount()
。
答案 1 :(得分:3)
SparseBooleanArray
不包含所有行的详细信息。键包含行的索引,如果选中,则包含值。如果检查了一行然后取消选中,则该数组将包含该行的一个条目。因此,要解决此问题,您需要执行以下操作:
lSize = ObjectOfSparseBooleanArray.size()
来获取大小。for(int i = 0; i < lSize; i++) {
int lPos = ObjectOfSparseBooleanArray.keyAt(i);
boolean lIsChecked = ObjectOfSparseBooleanArray.get(lPos);