我已经实现了一个 ExapndableListView(这个问题对 ListView 来说很笼统)。
我已经添加了这个简化的代码示例(没有其他 View ,因为没有它们问题是一样的)。
问题是当我滚动时,有些分配我无法理解。 对于我滚动时显示的前 10-20 个新单元格(大约),分配了 3-4 MB +-,对于其余单元格,大约每 20 个单元格需要 1 MB。
据我所知,它不应该在加载列表后分配任何东西,只是重用适当的单元格。
public View getChildView(int groupPosition, int childPosition, boolean isLastChild,
View convertView, ViewGroup parent) {
EventListItem object = (EventListItem) sections.get(groupPosition)
.getItemAtIndex(childPosition);
ViewHolder holder;
if ( hView == null ) {
hView = mInflater.inflate(R.layout.popularity_row, null);
holder = new ViewHolder();
holder.title = (TextView) hView.findViewById(R.id.label);
convertView.setTag(holder);
}
else {
holder = (ViewHolder) hView.getTag();
}
holder.id = object.getId();
holder.title.setText(object.getTitle());
return convertView;
}
static class ViewHolder {
String id;
}
可能是什么问题? 当我滚动时它会分配什么?
非常感谢。
最佳答案
首先,去掉 View hView = convertView;
行,然后在函数中使用 convertView
。您在那里创建的链接没有用。
除此之外,您不必担心此处的分配。 ListView 为您做了很多优化,并且可能会大量使用/释放对象。
关于Android ListView 性能 - 奇怪的分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11041116/