Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/206.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 取消选中项时,Listview.GetCheckEditePositions()未返回正确的结果_Android - Fatal编程技术网

Android 取消选中项时,Listview.GetCheckEditePositions()未返回正确的结果

Android 取消选中项时,Listview.GetCheckEditePositions()未返回正确的结果,android,Android,我使用SparseBooleanArray获取listView中选中列表项的位置: // lv is my listview final SparseBooleanArray checkedItems = lv.getCheckedItemPositions(); 当我选中一个列表项时,这可以正常工作。但当我从listview中取消选中一个项目时,它的大小并没有减小。它保持原样 让我解释一下发生了什么: 我首先选择3个listitems,我得到checkedItems的大小为3。但当我从列表中

我使用SparseBooleanArray获取listView中选中列表项的位置:

// 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不包含所有行的详细信息。键包含行的索引,如果选中,则值包含。如果选中一行,然后取消选中,则数组将包含该行的一个条目。因此,要处理此问题,您需要执行以下操作:

  • 通过调用int
    lSize=ObjectOfSparseBooleanArray.size()
    获取大小
  • for(inti=0;i
  • 获取行号
    int lPos=ObjectOfSparseBooleanArray.keyAt(i);
  • Get是选中的行
    boolean lIsChecked=ObjectOfSparseBooleanArray.Get(lPos);
  • 对所选行执行处理

  • 要确认是否选中了特定项目,请使用
    checkedItems.valueAt(i)
    。布尔值指示项目在位置i的已选中状态。