可扩展列表getChildView每个子项运行两次

时间:2011-07-02 13:19:14

标签: android

我已经将ExpandableList分配给了扩展BaseExpandableListAdapter。在这里,我实现了getChildView方法来为每个孩子设置并返回一个View:

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

我的观点看来很好,即该小组只列出了两个孩子,但为什么要做所有额外的工作呢?

更新& ANSWER

似乎如果列表视图设置为wrap_content的高度,则每个孩子将调用getChildView两次。将高度更改为fill_parent似乎可以解决此问题。

1 个答案:

答案 0 :(得分:13)

正如我在其他问题中提到的那样,ListView调用getView()首先获取某些项目的尺寸(宽度和高度),然后再次调用getView()来实际呈现项目。查看this video out,这是Android的“必读”。处理你问题的那一点是在41:30分。