ListView适配器中`convertView`的目的是什么?

Kin*_*uoc 28 java android

在android中,我通常MyAdapter extends ArrayAdapter用来创建视图ListView,因此,我必须覆盖该函数

public View getView(int position, View convertView, ViewGroup parent) {
    // somecode here
}
Run Code Online (Sandbox Code Playgroud)

但是,我不知道到底是什么convertViewparent做!有没有人有建议?更多细节,更多帮助!谢谢!

Ale*_*ood 46

从文档中,

convertView - 如果可能,重用旧视图.注意:在使用之前,应检查此视图是否为非null且类型是否合适.如果无法转换此视图以显示正确的数据,则此方法可以创建新视图.

换句话说,此参数严格用于提高您的性能Adapter.当a ListView使用an AdapterViews 填充其行时,适配器View通过调用getView()每一行来填充每个列表项与对象.适配器使用它convertView作为回收View不再使用的旧对象的方法.通过这种方式,ListView每次适配器想要显示新的列表项时,可以发送不再显示的旧的"循环"视图对象,而不是实例化全新对象.这是convertView参数的目的.


jee*_*eet 27

convertView 用于重用旧视图.

请理解android中的Adapter 功能.Adapter使您可以使用新数据重用某些视图.

因此,如果一个列表有15个项目,但是窗口只能显示5个项目,那么最初convertView将为null,我们需要为这五个项目创建新视图,但是当您向下滚动时,您有两个选项,或者创建6 -10个视图,或重新使用旧视图并将新数据加载到这些视图中. AdapterconvertView允许你做后一种方法.


Cha*_*Yao 5

convertView是不可见的ListView项缓存,因此可以重复使用.它让ListView不需要创建很多ListItem,因此可以节省记忆并使ListView更加流畅.

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View view;
    if(convertView == null) {
        view = this.inflator.inflate(android.R.layout.simple_list_item_1, parent, false);
    }
    else {
        view = convertView;
    }
    // remaining implementation
    return view;
}
Run Code Online (Sandbox Code Playgroud)