ListView getCheckedItemPositions调用问题

时间:2010-07-09 21:34:12

标签: android listview

我遇到了ListView的getCheckedItemPositions调用问题。第一个调用有效但后续调用返回相同的结果,即使先前检查的项目未选中。

例如

第一个电话:位置0&检查1,结果显示0&检查1 第二个电话:位置0& 1未取消选中,结果仍显示0&检查1。

这是一个bug还是getCheckedItemPositions不能这样工作?有人可以澄清吗?谢谢!

3 个答案:

答案 0 :(得分:4)

使用valueAt()而不是get(),然后使用keyAt()查找已检查的itmes的正确索引。

SparseBooleanArray checkedItems = lview.getCheckedItemPositions();
if (checkedItems.size() > 0) {
 for (int i=0; i<checkedItems.size(); i++) {
  if (checkedItems.valueAt(i)) {
    Log.d("checked item: " + lview.getItemAtPosition(checkedItems.keyAt(i)));
  }
 }
} 

答案 1 :(得分:2)

最近我遇到了同样的问题并在这里找到答案:

How to use getCheckedItemPositions of ListView

  

要获取多选ListView的所选项的索引,可以使用getCheckedItemPositions()返回SparseBooleanArray。

     

然而,该功能有一个未记录的陷阱,即使是这样   您选择一个项目然后取消选择,该项目仍包含在中   数组,尽管该项的值设置为false。

正如其他人所说,你需要通过返回的SparseBooleanArray进行迭代才能找到TRUE值。

链接中的示例代码。

答案 2 :(得分:0)

我认为这是在关闭列表时调用的,就像它在对话框中使用时一样,因此您可以保存设置。