【问题标题】:Listview.getCheckedItemPositions() not returning correct result when item is unchecked未选中项目时 Listview.getCheckedItemPositions() 未返回正确结果
【发布时间】:2017-03-31 20:59:47
【问题描述】:

我使用 SparseBooleanArray 来获取列表视图中选中的列表项的位置:

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

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

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

需要做什么?请帮帮我。

石头

【问题讨论】:

    标签: android


    【解决方案1】:

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

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

    【讨论】:

    • 要确认是否检查了特定项目,请使用checkedItems.valueAt(i)。布尔值表示位置 i 的项目的检查状态。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2011-01-15
      • 1970-01-01
      • 2011-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-13
      相关资源
      最近更新 更多