我正在创建一个包含可扩展列表视图的应用。子视图是动态创建的。它运行成功。在调试过程中,我发现getChildview函数运行了2次。
我创建动态布局并将其放入列表中。当getChildView运行2次时,布局添加2次到列表中..
答案 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;
}