2016-08-24 58 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

這就是爲什麼問這個問題。我只需要依靠大小。我解決了它。不管怎麼說,還是要謝謝你。 –

相關問題