1

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

4

2 回答 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 回答