1: Das LayoutInflater
nimmt dein Layout XML-Dateien und erstellt aus seinem Inhalt verschiedene View-Objekte.
2: Die Adapter dienen zur Wiederverwendung von Ansichten. Wenn eine Ansicht so gescrollt wird, dass sie nicht mehr sichtbar ist, kann sie für eine der neuen angezeigten Ansichten verwendet werden. Diese wiederverwendete Ansicht ist die convertView
. Wenn dies null ist, bedeutet dies, dass keine recycelte Ansicht vorhanden ist und wir eine neue erstellen müssen. Andernfalls sollten wir sie verwenden, um zu vermeiden, dass eine neue erstellt wird.
3: Das parent
wird bereitgestellt, damit Sie Ihre Ansicht für korrekte Layoutparameter aufblasen können.
All dies zusammen kann verwendet werden, um effektiv die Ansicht zu erstellen, die in Ihrer Liste angezeigt wird (oder eine andere Ansicht, die einen Adapter benötigt):
public View getView(int position, @Nullable View convertView, ViewGroup parent){
if (convertView == null) {
//We must create a View:
convertView = inflater.inflate(R.layout.my_list_item, parent, false);
}
//Here we can do changes to the convertView, such as set a text on a TextView
//or an image on an ImageView.
return convertView;
}
Beachten Sie die Verwendung von LayoutInflater
, parent
die als Argument dafür verwendet werden kann, und wie sie convertView
wiederverwendet wird.
getView()
Verfahren in Adapter ist für Ansicht des Erzeugungsstück einListView
,Gallery
...LayoutInflater
wird verwendet , um das View - Objekt zu erhalten , die Sie in einem Layout XML (das Root - Objekt, in der Regel eines zu definierenLinearLayout
,FrameLayout
oderRelativeLayout
)convertView
ist für das Recycling. Angenommen, Sie haben eine Listenansicht, in der nur 10 Elemente gleichzeitig angezeigt werden können. Derzeit wird Element 1 -> Element 10 angezeigt. Wenn Sie ein Element nach unten scrollen, wird Element 1 nicht auf dem Bildschirm angezeigt und Element 11 wird angezeigt . Um die Ansicht für Element 11 zu generieren, wird die Methode getView () aufgerufen.convertView
Hier ist die Ansicht von Element 1 (die nicht mehr erforderlich ist). Erstellen Sie stattdessen ein neues Ansichtsobjekt für Element 11 (was teuer ist). Warum nicht wiederverwendenconvertView
? => wir prüfenconvertView
nur, ob null ist oder nicht, wenn null neue Ansicht erstellen, sonst wiederverwendenconvertView
.parentView
ist die ListView oder Galerie ..., die die Ansicht des Elements enthält, diegetView()
generiert wird.Hinweis : Sie rufen diese Methode nicht direkt auf, sondern müssen sie nur implementieren, um der übergeordneten Ansicht mitzuteilen, wie die Ansicht des Elements generiert werden soll.
quelle
Sie können sich dieses Video über die Listenansicht ansehen. Es stammt aus den letzten Jahren von Google IO und ist für mich immer noch die beste Durchsicht auf Listenansichten.
http://www.youtube.com/watch?v=wDBM6wVEO70
Es bläst Layouts (die XML-Dateien in Ihrem res / layout / Ordner) in Java-Objekte wie LinearLayout und andere Ansichten auf.
Wenn Sie sich das Video ansehen, werden Sie über die Verwendung der Konvertierungsansicht auf dem Laufenden gehalten. Im Grunde handelt es sich um eine recycelte Ansicht, die darauf wartet, von Ihnen wiederverwendet zu werden, um zu vermeiden, dass ein neues Objekt erstellt und das Scrollen Ihrer Liste verlangsamt wird.
Ermöglicht es Ihnen, auf Ihre Listenansicht vom Adapter aus zu verweisen.
quelle
Wenn Sie mit XML entwerfen, sind alle Ihre UI-Elemente nur Tags und Parameter. Bevor Sie diese UI-Elemente verwenden können (z. B. TextView oder LinearLayout), müssen Sie die tatsächlichen Objekte erstellen, die diesen XML-Elementen entsprechen. Dafür ist der Inflater da. Der Inflater verwendet diese Tags und die entsprechenden Parameter, um die tatsächlichen Objekte zu erstellen und alle Parameter festzulegen. Danach können Sie mit findViewById () einen Verweis auf das UI-Element erhalten.
Dies ist eine interessante. Sie sehen, getView () wird jedes Mal aufgerufen, wenn ein Element in der Liste gezeichnet wird. Bevor das Objekt gezeichnet werden kann, muss es erstellt werden. Jetzt ist convertView im Grunde die zuletzt verwendete Ansicht zum Zeichnen eines Elements. In getView () blasen Sie zuerst die XML auf und verwenden dann findByViewID (), um die verschiedenen UI-Elemente des Listenelements abzurufen. Wenn wir nach (convertView == null) suchen, überprüfen wir, ob eine Ansicht (für das erste Element) null ist, und erstellen sie dann. Wenn sie bereits vorhanden ist, können Sie sie erneut verwenden, ohne den Aufblasvorgang erneut durchführen zu müssen . Macht es viel effizienter.
Sie müssen auch in getView () auf ein Konzept von ViewHolder gestoßen sein. Dies macht die Liste effizienter. Wir erstellen einen Ansichtsinhaber und speichern den Verweis auf alle UI-Elemente, die wir nach dem Aufblasen erhalten haben. Auf diese Weise können wir vermeiden, die zahlreichen findByViewId () aufzurufen, und viel Zeit sparen. Dieser ViewHolder wird in der Bedingung (convertView == null) erstellt und mit setTag () in der convertView gespeichert. In der else-Schleife erhalten wir es einfach mit getView () zurück und verwenden es wieder.
Das übergeordnete Element ist eine ViewGroup, an die Ihre von getView () erstellte Ansicht endgültig angehängt wird. In Ihrem Fall wäre dies die ListView.
Hoffe das hilft :)
quelle
Der Layout Inflator bläst / fügt Ihrer aktuellen Ansicht externes XML hinzu.
getView () wird mehrfach aufgerufen, auch beim Scrollen. Wenn die Ansicht bereits aufgeblasen ist, möchten wir dies nicht noch einmal tun, da das Aufblasen ein kostspieliger Prozess ist. Deshalb prüfen wir, ob es null ist, und blasen es dann auf.
Die übergeordnete Ansicht ist eine einzelne Zelle Ihrer Liste.
quelle
LayoutInflater
wird verwendet, um dynamische Ansichten des XML für dasListView
Element oder inonCreateView
dem Fragment zu generieren .ConvertView
wird im Wesentlichen verwendet, um die Ansichten zu recyceln, die derzeit nicht in der Ansicht enthalten sind. Angenommen, Sie haben eine scrollbareListView
. Beim Scrollen nach unten oder oben wirdconvertView
die Ansicht angezeigt, die gescrollt wurde. Diese Wiederverwendung spart Speicher.Der übergeordnete Parameter der
getView()
Methode gibt einen Verweis auf das übergeordnete Layout mit der ListView an. Angenommen, Sie möchten die ID eines Elements in der übergeordneten XML-Datei abrufen, die Sie verwenden können:quelle
getView()
Methode neu erstellenView
oderViewGroup
für jede ZeileListview
oder Spinner. Sie können diesView
oderViewGroup
in einerLayout XML
Datei imres/layout
Ordner definieren und den Verweis darauf gebenAdapter
Klasse Object .Wenn Sie 4 Elemente in einem Array haben, die an den Adapter übergeben werden.
getView()
Methode erstellt 4 Ansicht für 4 Zeilen von Adaper.Die LayoutInflater-Klasse verfügt über eine Methode inflate (), mit der ein Ansichtsobjekt aus dem XML-Ressourcenlayout erstellt wird.
quelle
Nützliche Informationen zu getView finden Sie auch auf der Adapter-Oberfläche in der Datei Adapter.java. Es sagt;
quelle