未选中项时Listview.getCheckedItemPositions()未返回正确的结果

时间:2011-07-05 18:33:52

标签: android

我使用 SparseBooleanArray 来获取listView中已检查列表项的位置:

// lv is my listview
final SparseBooleanArray checkedItems = lv.getCheckedItemPositions();

检查列表项时这很好用。但是当我从listview取消选中一个项目时,它的大小并没有减少。它保持不变。

让我解释一下发生了什么:
我首先选择3个列表项,然后我将 checkedItems 的大小设为3.但是当我从列表中取消选中一个项目时,它的大小不会变为2.它仍然是3.

需要做什么?请帮助我。

石头

2 个答案:

答案 0 :(得分:13)

SparseBooleanArray将整数映射到布尔值。 size()方法不返回包含的true项的数量,它返回存储的项数。其中一些项目可能是false

如果您想知道所检查的项目数,您可以遍历SparseBooleanArray,您可以通过在选中状态更改时调用isItemChecked()来跟踪已检查项目的数量,或者如果您使用的是API 11+( Honeycomb)你可以致电getCheckedItemCount()

答案 1 :(得分:3)

SparseBooleanArray不包含所有行的详细信息。键包含行的索引,如果选中,则包含值。如果检查了一行然后取消选中,则该数组将包含该行的一个条目。因此,要解决此问题,您需要执行以下操作:

  1. 通过调用int lSize = ObjectOfSparseBooleanArray.size()来获取大小。
  2. for(int i = 0; i < lSize; i++) {
  3. 运行循环
  4. 获取行号int lPos = ObjectOfSparseBooleanArray.keyAt(i);
  5. 获取行检查boolean lIsChecked = ObjectOfSparseBooleanArray.get(lPos);
  6. 对所选行进行处理!