3

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

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

4

5 回答 5

1

getChildView()不是一个适合创造孩子的地方。它可能经常被调用。无论如何,渲染过程需要访问孩子两次。

在没有更多信息的情况下,无法判断将孩子添加到列表中的合适位置,或者即使您的列表方法是正确的方法。

于 2013-01-21T11:23:20.850 回答
0

我是 android 开发的新手,可能是错误的,但正如我所见,它getChildView()有第 4 个参数 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
}
于 2014-11-11T12:11:28.507 回答
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;
    }
于 2014-06-03T13:13:35.647 回答
0

列表视图的高度应该是match_parent而不是wrap_content.

于 2015-09-07T12:32:14.890 回答
0

one thing worked for me was.

@Override
public boolean hasStableIds() {
    // To avoid refreshing return true and makesure Ids each position have same view.
    return true;
    //return false;
}
于 2016-02-01T06:21:46.277 回答