2012-09-15 1 views
8

Ich bin neu in Android-Programmierung und die ersten Schritte mit Adaptern (für eine ListView).überschreiben Adapter.getView

Aufschalten der Adapter.getView Oft sehe ich Dinge wie diese:

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

    View itemView = null; 

    if (convertView == null) { 
     LayoutInflater inflater = (LayoutInflater) parent.getContext() 
      .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     itemView = inflater.inflate(R.layout.table_row, null); 
    } else { 
     itemView = convertView; 
    } 

    // play with itemView 

    return itemView; 
} 

Meine Frage ist, was gegen das spricht:

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

    View itemView = super(position, convertView, parent); 

    // play with itemView 

    return itemView; 
} 

Dies scheint für mich zu arbeiten, aber ich bin sicher, dass ein großer es Punkt fehlt mir: D

Vielen Dank für das Lesen und Entschuldigung für mein schlechtes Englisch ...

Antwort

6

Sie

View itemView = super(position, convertView, parent); 

verwenden können, wenn nur Sie sind Ableiten Adapter "ready to use" (nicht BaseAdapter), wie SimpleAdapter oder ArrayAdapter, da sie bereits ihre Implementierung für die getView() haben.

Werfen Sie einen Blick auf sie: http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.0.4_r2.1/android/widget/ArrayAdapter.java#361 für den ArrayAdapter, und http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.0.4_r2.1/android/widget/SimpleAdapter.java#113 für SimpleAdapter.

Wenn Sie von BaseAdapter ableiten, müssen Sie das gesamte Verfahren manuell die implementieren, wie Sie im ersten Beispiel beschrieben habe, weil sie es muss nicht aus der Box: http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.0.4_r2.1/android/widget/BaseAdapter.java#BaseAdapter

1

Wenn Sie meinen, dass dieses Stück Code:

if (convertView == null) { 
    LayoutInflater inflater = (LayoutInflater) parent.getContext() 
     .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    itemView = inflater.inflate(R.layout.table_row, null); 
} else { 
    itemView = convertView; 
} 

scheint unnötig für Sie: dieses Stück Code Android ermöglicht eine relativ kleine Anzahl von Zellen zu erzeugen (entspricht die Anzahl der Zellen, die auf dem Bildschirm sichtbar sind + -), und dann "recycle" diese Zellen - benutze sie immer und immer wieder, während der Benutzer die Liste scrollt, anstatt eine Zelle für jedes Objekt in Ihrem Array. Dies wird Ihnen helfen mit:

  1. Saving Speicher - weil Sie Ansicht erstellen nicht für jedes Element im Array

  2. CPU-Auslastung Sparen - ein View Objekt aus XML-Datei zu erstellen ("Aufpumpen ") ist relativ teuer Aufgabe und dies für jeden Artikel in Ihrem Array zu tun, könnte Ihren UI-Thread

ersticken