我正在创建一个包含可扩展列表视图的应用程序。子视图是动态创建的。它运行成功。在调试过程中,我发现 getChildview 函数运行了 2 次。
我创建动态布局并将其放入列表中。当 getChildView 运行 2 次时,布局在列表中添加了 2 次..
我正在创建一个包含可扩展列表视图的应用程序。子视图是动态创建的。它运行成功。在调试过程中,我发现 getChildview 函数运行了 2 次。
我创建动态布局并将其放入列表中。当 getChildView 运行 2 次时,布局在列表中添加了 2 次..
getChildView()
不是一个适合创造孩子的地方。它可能经常被调用。无论如何,渲染过程需要访问孩子两次。
在没有更多信息的情况下,无法判断将孩子添加到列表中的合适位置,或者即使您的列表方法是正确的方法。
我是 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
}
如果您在组单击中重新生成列表,则将其删除可能是一种解决方案。例如,在下面的代码中,由于 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;
}
列表视图的高度应该是match_parent
而不是wrap_content
.
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;
}