我无法理解以下代码

I am not able to understand the following code

 View listItemView = convertView;
      if(listItemView == null) {
          listItemView = LayoutInflater.from(getContext()).inflate(
                R.layout.list_item, parent, false);

我无法理解上面的代码code.This代码是制作自定义的一部分ArrayAdapter.Following是特定项目的自定义ArrayAdapter代码。

public class AndroidFlavorAdapter extends ArrayAdapter<AndroidFlavor> {

private static final String LOG_TAG = AndroidFlavorAdapter.class.getSimpleName();


public AndroidFlavorAdapter(Activity context, ArrayList<AndroidFlavor> androidFlavors) {

    super(context, 0, androidFlavors);
}


@Override
public View getView(int position, View convertView, ViewGroup parent) {

    View listItemView = convertView;
    if(listItemView == null) {
        listItemView = LayoutInflater.from(getContext()).inflate(
                R.layout.list_item, parent, false);
    }


    AndroidFlavor currentAndroidFlavor = getItem(position);

    TextView nameTextView = (TextView) listItemView.findViewById(R.id.version_name);

    nameTextView.setText(currentAndroidFlavor.getVersionName());

    TextView numberTextView = (TextView) listItemView.findViewById(R.id.version_number);
    numberTextView.setText(currentAndroidFlavor.getVersionNumber());


    ImageView iconView = (ImageView) listItemView.findViewById(R.id.list_item_icon);

    iconView.setImageResource(currentAndroidFlavor.getImageResourceId());


    return listItemView;
}

}

为什么listItemView赋值convertView.Why 是否检查是否为null以及LayoutInflator的使用

convertView 是您的 listView 的一项。

getView 会重复你的custum layout + convertView

这是您的自定义列表视图中的一项

基本上,每次您需要为任何 ListView 位置绑定自定义布局时,都会调用 getView 方法。 代码:View listItemView = convertView; 只是帮助您理解 converView 是您的列表项视图。因此,如果在该位置 this 为 null,getView 方法会将 ListView 位置与您的自定义布局绑定。

如果您的列表适配器中有 10 个项目,getView 将被调用 10 次,位置为 0 到 9。基本上,getView 方法创建一个将在特定位置膨胀的视图(即 0 到 9)。如果 UI 中发生某些事情(例如滚动),getView 方法将被重复。一开始 convertViewnull 因为还没有膨胀,你现在要膨胀。下一次 convertView 将不会为空(因为你已经膨胀了),你所要做的就是更新 convertView 的内容。他们已将 convertView 分配给局部变量 listItemView 并对其进行了更改。