2017-03-13 111 views
-3
View listItemView = convertView; 
     if(listItemView == null) { 
      listItemView = LayoutInflater.from(getContext()).inflate(
       R.layout.list_item, parent, false); 

我無法理解上述代碼。此代碼是製作自定義ArrayAdapter的一部分。以下是特定項目的自定義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是檢查是否爲空或不是和LayoutInflator的使用。

回答

1

如果在列表適配器中有10個項目,getView將被調用10次,位置0到9.基本上,getView方法創建的視圖將在特定位置(即0到9)內膨脹。如果UI中發生了某些事情(例如滾動),則將重複使用方法getView。起初convertViewnull因爲沒有什麼是膨脹的,你現在要膨脹。下一次開始convertView不會爲空(因爲您已經充值),您所要做的就是更新convertView的內容。他們已將convertView分配給本地變量listItemView並對此進行了更改。

0

convertView是您的listView中的一項。

getView它會重複你俗佈局+ convertView

這是一項自定義的ListView

+0

你的意思是說,我們正在添加我們的自定義佈局與列表視圖,哪些是相等的或getView方法綁定? –

0

基本上getView方法是誰被調用每次你需要綁定您的自定義佈局任何ListView時間的一個位置。 代碼:View listItemView = convertView;只是幫助您瞭解converView是您的列表項視圖。所以如果在這個位置這是空的getView方法將綁定您的自定義佈局ListView位置。