Android工作室;将视图膨胀并保存到 convertView 中有什么意义?

Android Studio; What is the point of inflating and saving a view into convertView?

@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null){
    convertView = ContactViewActivity.this.getLayoutInflater().inflate(R.layout.contact_view_field_row,
    parent, false);
}

String value = (String)getItem(position);

TextView fieldValue = (TextView)convertView.findViewById(R.id.contact_view_row_value);
fieldValue.setText(value);

return convertView;
}

以上代码取自 BaseAdapter class。那么将膨胀视图设置为convertView有什么意义呢? getView 的全部目的是在没有视图的情况下创建一个视图,给它属性,然后 return 它可以显示在 ListView 的应用程序中,对吧?那么为什么不直接说 findViewById(R.id.contact_view_row_value); 呢?我的意思是我们真正用 layoutInflater 做什么?我认为既然我们将它设置为等于 convertView,就不需要键入 convertView.findViewById。我的意思是它已经等于一个膨胀的 XML 文件对吧?我在这里很困惑,我真的很感激一些澄清。

因为 convertView 是可以重复使用的东西,虽然在运行时你不知道是否正在为你提供一个现有的 View 其数据必须更新,或者如果一个新的 View需要充气。

当您的应用程序启动时,您需要 inflate 您的 Views 以便所有数据都显示在您的 ListView 中。 Inflate 意味着将资源 XML 解析为图形对象,并为其提供 Android 的 Context,因此它成为具有在图形层次结构上呈现和交互的潜力。稍后在应用程序中,Android 试图通过向您传递一个先前已膨胀的 View 来帮助您节省资源并避免不必要的 inflation;这就是我们检查 convertView 是否不等于 null 的原因。如果不是,您可以 将现有 View 转换 为显示与当前索引相关的数据的内容。

但是,值得注意的是 ListView 现在已弃用。尝试使用 RecyclerView 代替,这种行为更明显。这是一个 .