我有并且ExpandableList分配给扩展的BaseExpandableListAdapter。在这里,我实现了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)都相同…所以在第三组,如果我有两个孩子,我会看到:
groupIndex = 3childIndex = 0
然后
groupIndex = 3childIndex = 1
然后重复:
groupIndex = 3childIndex = 0
最后:
groupIndex = 3childIndex = 1
我的观点似乎不错,也就是说,这个小组只有两个孩子,但为什么要做所有额外的工作呢?
更新答案(&A)
如果listview被设置为wrap_content的高度,那么每个孩子将调用getChildView两次。将高度更改为fill_parent似乎可以修复此行为。

最佳答案

正如我在您的另一个问题中提到的,ListView首先调用getView()来获取某些项的维度(宽度和高度),然后再次调用getView()来实际呈现这些项。检查this video out,这是android的“必读”。处理你问题的时间是41:30分。

08-05 21:25