我遇到了ListView的getCheckedItemPositions调用问题。第一个调用有效但后续调用返回相同的结果,即使先前检查的项目未选中。
例如
第一个电话:位置0&检查1,结果显示0&检查1 第二个电话:位置0& 1未取消选中,结果仍显示0&检查1。
这是一个bug还是getCheckedItemPositions不能这样工作?有人可以澄清吗?谢谢!
答案 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)
我认为这是在关闭列表时调用的,就像它在对话框中使用时一样,因此您可以保存设置。