我无法理解以下代码

时间:2017-03-13 07:34:28

标签: android android-arrayadapter

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

我无法理解上面的代码。这段代码是制作自定义ArrayAdapter的一部分。以下是特定项目的Custom 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赋值的。为什么检查它是否为null以及LayoutInflator的用法。

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

convertView是listView中的一项。

getView它将重复您的custum布局+ convertView

这是您自定义listView的一个项目

答案 2 :(得分:0)

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