Hello android开发者, 我已经阅读了关于BaseAdapter的getView方法的文档,我理解的是视图可以重用/回收,因此在使用之前应检查此视图是否为非null且类型是否合适。在我的情况下,每次convertview为null并创建新视图。 尽管列表已正确填充,但我想知道何时回收视图以及何时创建新视图。
答案 0 :(得分:1)
基本上,当您滚动列表时,它会被回收。当项目被隐藏时 - 它可以被回收并用作新的可见项目。尝试添加约100个项目并滚动它们并检查真正创建的视图数量。
答案 1 :(得分:0)
so should check that this view is non-null and of an appropriate type before using
所以,我相信你在ListView中使用了多个Layouts。
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(非空)的可用性并使用它,而不是给新视图充气。
这样:
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可用(非空)可以重用,因为您滚动了List。