2011-07-02 65 views
4

我得到了和ExpandableList,我將其分配給擴展的BaseExpandableListAdapter。在這裏,我實現getChildView方法來設置並返回給每個孩子一個觀點:ExpandableList getChildView每個子女運行兩次

public View getChildView(int groupIndex, int childIndex, boolean isLastChild, View convertView, ViewGroup parent) { 

    LinearLayout layout; 
    if (convertView == null) { 
      layout = (LinearLayout) LayoutInflater.from(MyApp.getContext()).inflate(R.layout.rooms_room_list_row, parent, false); 
     } else { 
      layout = (LinearLayout) convertView; 
     } 

    // Do some custom stuff with views on the layout 
    ... 

    return layout; 

} 

調試時,我注意到,getChildView每名兒童執行兩次。在(即對groupIndex,childIndex,isLastChild)通過了所有的值都是一樣的...所以在第3組,如果我有兩個孩子,我會看到:

groupIndex = 3childIndex = 0

然後

groupIndex = 3childIndex = 1

然後它重複:

groupIndex = 3childIndex = 0

最後:

groupIndex = 3childIndex = 1

出現我的看法罰款,即,只有兩種爲集團上市的孩子,但爲什麼它做所有的額外的工作?

UPDATE & ANSWER

看來,如果該列表視圖設置爲wrap_content的高度,則getChildView將每名兒童兩次打電話。將高度更改爲fill_parent似乎可以解決此問題。

+0

你能告訴我你的完整適配器嗎?使用自定義適配器進行expandablelistview時遇到問題,getChild從未被調用。 –

回答

13

正如我在您的其他問題所提到的,ListView調用getView()得到的尺寸(寬度和高度)第一部分項目,然後再次調用getView()實際呈現的項目。檢查this video out,這是Android的「必讀」。處理你的問題的那一刻是在分鐘41:30。

+0

有什麼我應該做的,以便我沒有執行所有額外的工作來使視圖準備好? – bugfixr

+2

視頻指出,listview的高度應該是'fill_parent'而不是'wrap_content'。試試(如果是這種情況)。 – dmon

+0

奇怪......那是做的。奇怪的是,它也影響了其他問題... – bugfixr