您好 android 开发人员,我已阅读有关 BaseAdapter 的 getView 方法的文档,并且我的理解是视图可以重用/回收,因此在使用之前应检查此视图是否为非空且类型合适。在我的情况下,每次 convertview 为空并创建新视图。尽管列表已正确填充,但我想知道何时回收视图以及何时创建新视图。
问问题
2286 次
2 回答
1
基本上,当您滚动列表时,它会被回收。当项目被隐藏时 - 它可以被回收并用作新的可见项目。尝试添加大约 100 个项目并滚动它们并检查真正创建了多少视图。
于 2013-02-07T07:27:45.657 回答
0
so should check that this view is non-null and of an appropriate type before using
所以,我相信你在 ListView 中使用了多个布局。
In my case every time convertview is null and new view is created
这可能是因为,您没有使用:
@Override
public int getItemViewType(int position) {
return dataArray[position].getType();
}
@Override
public int getViewTypeCount() {
return TYPE_MAX_COUNT;
}
Though list is populated correctly,but I would like to know when view will be recycled and when it will create new view
它不会自动回收,您应该检查 ConvertView(not null) 的可用性并使用它,而不是膨胀新视图。
这边走:
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
int type = getItemViewType(position);
if (convertView == null) {
holder = new ViewHolder();
switch (type) {
case TYPE1:
//inflate type1
break;
case TYPE2:
//inflate type2
break;
}
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
}
当特定类型的视图至少膨胀一次并且不再可见时,ConvertView 可以重用(非空),因为您滚动了列表。
于 2013-02-07T08:38:59.297 回答