android listView getCheckedPosition返回错误的SparseBooleanArray

时间:2016-08-24 09:58:10

标签: android listview

我正在使用listview和ArrayAdapter,并有以下代码:

     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);
     }

添加上面的代码后,如果我检查了一些项目,check.size()=仍然计算所有项目的数量。预期结果是 - checked.size()&lt;计数。

感谢。

2 个答案:

答案 0 :(得分:0)

好。 listView.getCheckedItemCount()工作正常。 很遗憾listView.getCheckedItemCount()仅在listView.getCheckedItemPositions().size()

之后返回的值不同于setItemChecked(i, true)的{​​{1}}

答案 1 :(得分:0)

getCheckedItemPositions可能会有点棘手。正如您所注意到的,基于与ListView的交互,它可能会返回不同的结果。 简短版本:一旦您选择并取消选择了某个项目,该项目仍由getCheckedItemPositions返回,其值为false。因此,您需要实际读取键中的值,而不是依赖于大小。