getChildView方法在Expandable ListView中运行2次

时间:2013-01-21 11:15:54

标签: android expandablelistview

我正在创建一个包含可扩展列表视图的应用。子视图是动态创建的。它运行成功。在调试过程中,我发现getChildview函数运行了2次。

我创建动态布局并将其放入列表中。当getChildView运行2次时,布局添加2次到列表中..

5 个答案:

答案 0 :(得分:1)

getChildView()不适合创建儿童。它可能经常被称为。无论如何,渲染过程需要两次访问孩子。

无法判断将孩子添加到列表中的适当位置,或者即使您的列表方法是正确的方法,也无法获得更多信息。

答案 1 :(得分:0)

如果在组点击中重新生成列表,则删除它可以是一种解决方案。例如,在以下代码中,由于myList.expandGroup(groupPosition),getChildView()总是被调用两次。

public boolean onGroupClick(ExpandableListView parent, View v,
            int groupPosition, long id) {

        //get the group header
        HeaderInfo headerInfo = medicationDate.get(groupPosition);
        myList.expandGroup(groupPosition);
        //set the current group to be selected so that it becomes visible
        //myList.setSelectedGroup(groupPosition);
        //display it or do something with it
        Toast.makeText(getBaseContext(), "Child on Header " + headerInfo.getHeaderInfo()+"with childsize"+headerInfo.getChildInfo().size(), 
                Toast.LENGTH_SHORT).show(); 

        return false;
    }

答案 2 :(得分:0)

我是Android开发的新手,也许是错的,但是我看到getChildView()有第四个参数View convertView,这是第一次需要渲染的null。一旦创建,它将被存储并在需要时再次使用。因此,如果您在getChildView()中创建新视图,则可以使用此类

public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
  if (convertView != null) {
      // View is already created here, update it if you like
      return convertView;
  }
  // Else create your view(s) here and return the root of view container as usual
  ...
  return convertView; // or whatever your root view is
}

答案 3 :(得分:0)

列表视图的高度应为match_parent,而不是wrap_content

答案 4 :(得分:0)

有一件事对我有用。

@Override
public boolean hasStableIds() {
    // To avoid refreshing return true and makesure Ids each position have same view.
    return true;
    //return false;
}