2012-01-09 82 views
2

我在Expandable ListView中顯示來自SQLite數據庫的條目,並且一切正常,但是我想添加在所有子項旁邊的複選框中。每次我檢查一個複選框,然後向下滾動或合同我檢查過的複選框不會保存複選框的狀態。我知道,只要我向下滾動並展開組等,這個列表就會被回收。我怎樣才能保存每個複選框的狀態(每個孩子)?我有一個擴展了CursorTreeAdapter的類,並且方法中沒有「childPosition」。爲了拯救國家我需要做些什麼?如何在可擴展列表視圖中保存複選框的狀態 - Android

回答

1

您可以擁有一個大小與列表元素總數相同的布爾型標誌數組,並設置並從該數組中爲任何組件獲取檢查值。

+0

感謝您的回覆。在哪種方法下,我會調用這個數組來設置一個複選框來檢查我是否回滾了?另外,你能提供一些示例代碼嗎? – user990230 2012-01-09 05:31:24

+0

你需要在getChildView方法中使用這個數組,每當你回滾或設置適配器時它都會被調用,我現在還沒有任何示例,但是你可以搜索並按照鏈接自定義可擴展列表視圖,你會得到足夠的幫助。 – jeet 2012-01-09 05:42:07

0

另一個解決方案是你可以在列表視圖中爲每個元素保存一個計數器。例如,如果您有Person列表,您可以在Person類中添加一個計數器變量。

而在getChildView方法中,把所有的代碼放在下面的if塊中;

public View getChildView(final int groupPosition, final int childPosition, boolean isLastChild, View convertView, final ViewGroup parent) { 

    //FOR SAVE THE STATES!! 
    if(parents.get(groupPosition).getCounter()==0) { 
     DatePicker datePicker = null; 
     Button ok = null; 
     Spinner installment = null; 
     CheckBox creditCard; 
     ......//BLA BLA BLA 


     //After finish your codes, increment the counter 
     parents.get(groupPosition).setCounter((parents.get(groupPosition).getCounter()+1)); 
    } 

    return convertView; 
} 

因爲對於每個調用的expandGroup方法,所有的初始化(現在這些都在if塊中)重複。因爲這樣你就失去了你的物體狀態。

希望得到這個幫助。

相關問題