2017-02-04 3 views
0

I Grid Führung an Entwicklern android gefunden: https://developer.android.com/guide/topics/ui/layout/gridview.htmlAndroid BaseAdapter getView

// create a new ImageView for each item referenced by the Adapter 
public View getView(int position, View convertView, ViewGroup parent) { 
    ImageView imageView; 
    if (convertView == null) { 
     // if it's not recycled, initialize some attributes 
     imageView = new ImageView(mContext); 
     imageView.setLayoutParams(new GridView.LayoutParams(85, 85)); 
     imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); 
     imageView.setPadding(8, 8, 8, 8); 
    } else { 
     imageView = (ImageView) convertView; 
    } 

    imageView.setImageResource(mThumbIds[position]); 
    return imageView; 
} 

„Ende der getView() Methode, die Position Ganzzahl in die Methode übergeben wird verwendet, um ein Bild von der mThumbIds Array auszuwählen , das als Bildressource für ImageView festgelegt wird. "

Ich bin darüber verwirrt.

Warum müssen wir setImageResource jedes Mal aufrufen, anstatt es nur aufzurufen, wenn convertView null ist? Sollte nicht convertView, wenn es nicht null ist bereits Bildressource gesetzt hat, wie mit Polsterung, Skaleneinstellungen usw.

// create a new ImageView for each item referenced by the Adapter 
public View getView(int position, View convertView, ViewGroup parent) { 
    ImageView imageView; 
    if (convertView == null) { 
     // if it's not recycled, initialize some attributes 
     imageView = new ImageView(mContext); 
     imageView.setLayoutParams(new GridView.LayoutParams(85, 85)); 
     imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); 
     imageView.setPadding(8, 8, 8, 8); 
     imageView.setImageResource(mThumbIds[position]); 
    } else { 
     imageView = (ImageView) convertView; 
    } 
    return imageView; 
} 

Antwort

1

Überprüfen dieser Satz älterer Position verwendet wird:

getView() Diese Methode erstellt eine neue Ansicht für jedes Bild, das dem ImageAdapter hinzugefügt wird. Wenn dies aufgerufen wird, wird eine Ansicht übergeben, die normalerweise ein wiederverwendetes Objekt ist (zumindest nachdem es einmal aufgerufen wurde). So

wenn das System eine Ansicht recycelt, wird es recycelt, wie im Zustand sie gelassen wurden. Wenn das Bild beim Verlassen des Bildschirms auf ImageView gesetzt wurde, wird es angezeigt, wenn das System es erneut verwendet (convertView), sodass es explizit neu initialisiert werden muss. Obwohl padding, scale nicht betroffen ist, da es für alle imageview s gleich war, aber ImageResource muss jedes Mal festgelegt werden.

1

für jede Position der Bildressource ist anders und deshalb nennen wir müssen setImageResource

wenn convertView = null, das heißt, eine vorher Instanz Ansicht, die Bildressource hat

vom Doc
Verwandte Themen