我无法理解以下代码
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
方法将被重复。一开始 convertView
是 null
因为还没有膨胀,你现在要膨胀。下一次 convertView
将不会为空(因为你已经膨胀了),你所要做的就是更新 convertView
的内容。他们已将 convertView
分配给局部变量 listItemView
并对其进行了更改。
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
方法将被重复。一开始 convertView
是 null
因为还没有膨胀,你现在要膨胀。下一次 convertView
将不会为空(因为你已经膨胀了),你所要做的就是更新 convertView
的内容。他们已将 convertView
分配给局部变量 listItemView
并对其进行了更改。