Zuallererst, auch wenn Sie denken, dass Sie etwas sehr grundlegendes fragen, wird es nie eine dumme Frage sein, wenn es etwas ist, das Sie nicht wissen.
Sie sollten die Dokumentation zum besseren Verständnis LayoutInflater überprüfen:
https://developer.android.com/reference/android/view/LayoutInflater.html
instanziert ein Layout XML-Datei in die entsprechenden Objekte anzeigen. Es wird nie direkt verwendet. Verwenden Sie stattdessen getLayoutInFlater() oder getSystemService (Class), um eine Standard-LayoutInFlater-Instanz abzurufen, die bereits an den aktuellen Kontext angeschlossen ist und korrekt konfiguriert für das Gerät ist, das Sie unter ausführen.
Sie müssen also eine vorhandene Instanz LayoutInflater
aus dem Kontext abrufen, keine neue erstellen. Das ist, warum können Sie nicht so etwas wie
LayoutInflater inflater = new LayoutInflater();
Aus der Dokumentation verwenden Sie, dass der richtige Weg, um die LayoutInflater
des Zugriffs finden ist:
LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
Aber Sie verwenden LayoutInflater.from(Context context)
. Wenn wir ihre Umsetzung gehen finden wir den folgenden Code:
public static LayoutInflater from(Context context) {
LayoutInflater LayoutInflater =
(LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if (LayoutInflater == null) {
throw new AssertionError("LayoutInflater not found.");
}
return LayoutInflater;
}
Wir sehen es die layoutInflater aus dem Kontext als Argument übergeben abruft.
Über die Art, wie diese Methode aufgerufen wird, wird sie wie Class.method
verwendet, da sie als statische definiert ist. Dies bedeutet, dass die Methode zur Klasse und nicht zur Instanz des Objekts gehört.
Für weitere Informationen über diese: https://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html
Für die Ansicht jeweiligen Frage zu verstehen:
Sie können ein Objekt anzeigen instanziiert wie
View view = new View(context);
Die Ansicht Beispiel wird eine Ansicht Objekt sein mit Standardattribute, und es wird nicht an eine übergeordnete Ansicht angehängt. Sie verwenden dies zum Beispiel zum dynamischen Erstellen von Layouts aus Code.
Warum verwenden Sie inflater.inflate(int resource, ViewGroup root, boolean attachToRoot);
?
Weil Sie eine Ansicht von einem XML-Layout aufblasen möchten. Und das verwenden wir für die LayoutInflater
.
Wieder finden Sie die Dokumentation für eine bessere Erklärung:
LayoutInflater inflater
Hoffe, es hilft.
Da '.from' eine statische Methode ist –
1. weil LayoutInflater einen Kontext benötigt, um Informationen zu erhalten fx: über Themes ... ist es auch eine Factory-Methode - fx: Sie brauchen nicht mehrere LayoutInflater-Instanzen Kontext ... 2. Diejenigen zu Linien sind zueinander unwichtig ...Zuerst erstellen Sie die Ansicht von den Ressourcen in der zweiten. Sie erstellen die Ansicht programmgesteuert. – Selvin