2016-08-24 61 views
0

我使用的ListView与ArrayAdapter和具有下面的代码:的Android的ListView getCheckedPosition返回错误SparseBooleanArray

 final SparseBooleanArray checked = listViewFilters.getCheckedItemPositions(); 

    if (checked.size() == listViewFilters.getAdapter().getCount()) { 
     //all is selected 
    } else { 
     //collect each value 
    } 

所有工作得很好,直到我需要从开始选择的所有项目。所以我加入这个代码,选择所有项目:

 for (int i = 0; i < listViewFilters.getAdapter().getCount(); i++) { 
      listViewFilters.setItemChecked(i, true); 
    } 

加入上面的代码后,如果我检查了一些项目,checked.size()=所有项目的计数反正。预期的结果是 - checked.size()< count。

谢谢。

+0

我认为你必须发布你的整个适配器代码。没有人确定你在代码中做了什么错误......可能是一些小错误.... – sushildlh

+0

当你检查一些项目后,你是否更新你的SparseBooleanArray? – Chol

+0

不,'checked.size()'不会改变:只有里面的内容改变 – pskink

回答

0

好。 listView.getCheckedItemCount()工作正常。 这很奇怪只看到setItemChecked(i, true)

0

getCheckedItemPositions后比listView.getCheckedItemPositions().size()listView.getCheckedItemCount()返回不同的值可能被证明是有点棘手。正如您注意到的,基于与ListView的交互,它可能会返回不同的结果。 短版本:一旦您选择并取消选择一个项目,该项目仍然返回getCheckedItemPositions,值为false。所以你需要从键中读取值,而不是依赖大小。

+0

这就是为什么问这个问题。我只需要依靠大小。我解决了它。不管怎么说,还是要谢谢你。 –

相关问题