我想選擇所有複選框從自定義列表查看單按鈕單擊。自定義列表視圖中的複選框問題
但是,當我在ListView中有超過9個項目時,我在下面的第二行代碼中得到NullPointerException。
View vi= diffeneceLv.getChildAt(i);
CheckBox cb = (CheckBox) vi.findViewById(R.id.conschkbx);
我想選擇所有複選框從自定義列表查看單按鈕單擊。自定義列表視圖中的複選框問題
但是,當我在ListView中有超過9個項目時,我在下面的第二行代碼中得到NullPointerException。
View vi= diffeneceLv.getChildAt(i);
CheckBox cb = (CheckBox) vi.findViewById(R.id.conschkbx);
你得到它錯了,ListView
重新使用您行,這意味着創建的行數/內存佈局不等於陣列您的項目。
通常,ListView
在滾動時重新將新數據設置爲上一行。
我建議你學習this blog post,這裏的作者是保持Checked狀態,然後在getView()
適配器中相應地設置它。
筆者已經創建bolean數組是這樣的:
private boolean[] thumbnailsselection;
,並把校驗的狀態或取消選中,後來從getView()
訪問它,你會做什麼是,你將存儲true
所有索引並刷新您的適配器。它會選擇你所有的行。
這是another post。
偉大的鏈接+1 ... –
爲了達到這個目的,您不應該持有個別視圖的參考,因爲它們會被回收。
爲了您的方便,ListView
持有BooleanSparseArray
來存儲檢查項目。此數組包含項目標識(索引/適配器中的項目位置)到布爾值的映射。
由於ListView
做一切對你來說,其良好的避免重新發明輪子和使用ListView
的能力,以保持其項目的選中狀態。所有你需要做的是設置一個選擇模式ListView
:setChoiceMode(int choiceMode)
要獲得任何項目的狀態,在ListView
叫isItemChecked(int position)
。有用的,如果你是重寫適配器的getView()
。
要獲得所有檢查,請致電getCheckedItemPositions()
在ListView
。
要設置檢查值,請致電setItemChecked(int position, boolean value)
ListView
。
其實我想在自定義列表視圖的佈局中添加SelectAll按鈕。點擊SelectAll按鈕,listview中的所有複選框都會被檢查。但如果我在列表視圖中少於9行,它工作正常,否則給複選框提供空指針異常。 – Dandroid
你的代碼在哪裏? –
你可以發佈[SSCCE](http://sscce.org)嗎?這應該會讓我們更容易幫助你。 –