了解GetView方法的convertView参数

时间:2013-02-07 07:24:19

标签: android baseadapter convertview

Hello android开发者, 我已经阅读了关于BaseAdapter的getView方法的文档,我理解的是视图可以重用/回收,因此在使用之前应检查此视图是否为非null且类型是否合适。在我的情况下,每次convertview为null并创建新视图。 尽管列表已正确填充,但我想知道何时回收视图以及何时创建新视图。

2 个答案:

答案 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。