2012-12-31 82 views
0

我想選擇所有複選框自定義列表查看單按鈕單擊。自定義列表視圖中的複選框問題

但是,當我在ListView中有超過9個項目時,我在下面的第二行代碼中得到NullPointerException。

View vi= diffeneceLv.getChildAt(i); 
CheckBox cb = (CheckBox) vi.findViewById(R.id.conschkbx); 
+2

你的代碼在哪裏? –

+0

你可以發佈[SSCCE](http://sscce.org)嗎?這應該會讓我們更容易幫助你。 –

回答

3

你得到它錯了,ListView重新使用您行,這意味着創建的行數/內存佈局不等於陣列您的項目。

通常,ListView在滾動時重新將新數據設置爲上一行。

我建議你學習this blog post,這裏的作者是保持Checked狀態,然後在getView()適配器中相應地設置它。

筆者已經創建bolean數組是這樣的:

private boolean[] thumbnailsselection; 

,並把校驗的狀態或取消選中,後來從getView()訪問它,你會做什麼是,你將存儲true所有索引並刷新您的適配器。它會選擇你所有的行。

這是another post

+0

偉大的鏈接+1 ... –

0

爲了達到這個目的,您不應該持有個別視圖的參考,因爲它們會被回收。

爲了您的方便,ListView持有BooleanSparseArray來存儲檢查項目。此數組包含項目標識(索引/適配器中的項目位置)到布爾值的映射。

由於ListView做一切對你來說,其良好的避免重新發明輪子和使用ListView的能力,以保持其項目的選中狀態。所有你需要做的是設置一個選擇模式ListViewsetChoiceMode(int choiceMode)

+0

其實我想在自定義列表視圖的佈局中添加SelectAll按鈕。點擊SelectAll按鈕,listview中的所有複選框都會被檢查。但如果我在列表視圖中少於9行,它工作正常,否則給複選框提供空指針異常。 – Dandroid

相關問題