Was ist LayoutInflater und wie verwende ich es richtig?

Was genau ist ein LayoutInflater in Android? Was ist die vorgesehene Methode, es zu benutzen? Ich kann hier verschiedene Arten der Nutzung, aber nicht in der Lage zu finden, die Suiten in meinem Fall.


Über die Frage

ich hatte so viele Verwirrungen über die richtige Verwendung der inflate() Methode. Wenn über das internet recherchiert, die Meisten Ergebnisse war entweder falsch oder unvollständig. Sogar die offizielle doc ist sehr vage. Dieser Beitrag ist eine Summe dessen, was ich finden konnte an verschiedenen Orten. Ich glaube, das wird hilfreich für Anfänger wie mich

InformationsquelleAutor Anees | 2018-08-07



One Reply
  1. 7

    Was ist ein LayoutInflater?

    LayoutInflater ist eine Klasse zum erstellen von Ansichten von einem layout-Ressource (xml -) Datei oder eine Knoten es (XmlPullParser Objekte).

    Diese können sein eine Darstellung entweder einer einzelnen Ansicht oder einer view-Hierarchie.

    Erstellen LayoutInflater Objekt

    Zum aufblasen, eine Ansicht, wir brauchen eine LayoutInflater Objekt. Anstatt neue Objekt, wir verwenden eine der folgenden Methoden normalerweise um ein vorhandenes Objekt mit dem Kontext.

    Die erste ist die am häufigsten verwendet, wegen seiner Einfachheit.

    Hier sind Beispiele für Verwendungen der letzten beiden Methoden.

    LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE)
    LayoutInflater inflater = (LayoutInflater)getSystemService(LayoutInflater.class)

    Aufblasen Ansichten

    Aufzublasen Ansichten LayoutInflater#inflate() Methode verwendet werden kann. Es hat vier Formen, wie unten aufgeführt. Eine der ersten beiden Methoden können verwendet werden, wenn die Quelle eine layout Ressource. Die letzten beiden Methoden werden verwendet, wenn die Quelle eines layout-Ressource-Knoten.

    1. Ansicht inflate(int Ressource, ViewGroup root)

    2. Ansicht inflate(int Ressource, ViewGroup root, boolean attachToRoot)

    3. Ansicht aufblasen(XmlPullParser parser, ViewGroup root)

    4. Ansicht aufblasen(XmlPullParser parser, ViewGroup root, boolean attachToRoot)

    root: Es ist eine ViewGroup, zu dem die neu erstellte view-Hierarchie ist zu angebracht.

    attachToRoot: Die erste und Dritte Methode fügt die neu erstellte view-Hierarchie auf das root-sobald es erstellt wurde. Allerdings, wenn Sie wählen manuell hinzufügen, indem Sie ViewGroup#addView() oder anbringen sollte getan werden, irgendwo sonst, dann können Sie die zweite oder die Letzte Methode, und legen Sie attachToRoot als falsch.
    Zum Beispiel innerhalb Fragment’s onCreateView() und beim erstellen einer Ansicht als RecyclerView’s itemView. Sollten Sie attachToRoot als false in diesen beiden Orten, da die Befestigung erfolgt woanders. Wenn wir es als true oder verwenden Sie den ersten oder Dritten Methode, die in solchen Orten, wird es werfen eine Fehlermeldung.

    java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.

    Mit dem Ergebnis

    Wenn attachToRoot wahr ist, wird das Ergebnis der stammansicht. Ansonsten wird die neu erstellte view-Hierarchie.

    Theoretisch alle diese Methoden gibt die gleiche Sache – die Wurzel anzeigen. Aber zu uns, Sie sind nicht das gleiche. Sind Sie?

    Einige häufige Fehler

    Ist es angezeigt, dass die Einstellung Wurzel als null, auch wenn es bekannt ist. Root kann null sein, wenn attachToRoot ist false. Es sollte jedoch gegeben werden, wenn möglich, weil es wird verwendet, um erstellen Sie die richtige Unterklasse von LayoutParams.

    • warum es heißt inflator, warum nicht Schöpfer (zum Beispiel). Warum genau dieses Wort?
    • Es ist, weil Nach dem erstellen, legt es (füllt / bläst) die neu angelegte Ansicht auf den Ort zur Verfügung in der es Eltern, wenn Sie als es ist die am häufigsten verwendete form (In anderen Formen, dieses Standard-Verhalten geändert werden kann es durch die übergabe attachToRoot als false)

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.