Von dem, was ich verstehe, konvertiert der LayoutInflater XML in Ansichten. Aber wenn ich Buttons, TextViews oder andere Widgets im Code verwende, muss ich einfach findViewById() verwenden, ohne diese Views zuerst aufblasen zu müssen. Sind diese Ansichten automatisch aufgebläht? Wenn ja, wann werden die Ansichten automatisch aufgebläht und wann müssen Sie sie manuell aufblasen?Werden Ansichten automatisch aufgeblasen?
Antwort
Sie müssen nur eine XML-Layout aufzublasen, und dann werden alle viewgroups und Ansichten (Schaltflächen, Textview, EditText usw.) Wird automatisch angezeigt.
In einer Activity-Klasse hat die oncreate-Methode eine Zeile SetContentview(), die das XML-Layout aufbläht.
Sie blähen Ihre Ansichten manuell auf, wenn Sie Ihre Aktivität und XML manuell erstellen.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.your_activity);
}
Ein Activity
muss einen Anruf an setContentView(R.layout.<your_layout_here>)
in seiner onCreate
Methode enthalten. Dadurch wird das XML im angegebenen Layout in die Ansichtshierarchie für Activity
aufgebläht. Für eine Fragment
, überschreiben die onCreateView
Methode wie unten:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.<your_layout_here>, container, false);
}
Sobald Sie ein Layout (und alle seine Kinder View
s) aufgeblasen haben in der Ansichtshierarchie, können Sie dann findViewById(R.id.<your_view_id>)
einen Verweis auf die bekommen tatsächliche View
Objekt, das Sie in die Hierarchie aufgeblasen haben und damit spielen.
Wenige Dinge sind hier:
1.Ansicht für Ihre Aktivität (UI-Bildschirm), dass wird von setContentView() Methode.
2.Ansicht für eine bestimmte UI-Komponente z.B. Schaltfläche, die entweder in xml Ihrer activity_layout erstellt wird, oder Sie können separate XML-Layoutdatei für Ihre spezifische UI-Komponente aufblasen. Das beste Beispiel und Verwendung ist wie das Aufblasen einer XML-Layoutdatei für Ihren benutzerdefinierten Toast.
So, hier ist die Sache, die setContentView() und Aufblasen eines XML-Layout-Datei für eine separate Ansicht bezieht: Beide dieser ein Layout für Komponenten Ansicht und Ansicht, beide erzeugt eine binäre Ausgabe für Layout und verwenden Sie sie wie oben beschrieben.
Ihre grundlegende Frage ist: "Wann muss ich eine Ansicht manuell aufblasen, und wann ist es automatisch für mich erledigt?" Ankesh Kumar Jaisansaria gab eine gute Antwort. Schau auch hier: [Unterschied zwischen setcontentview und inflater] (http://stackoverflow.com/questions/17808177/difference-between-setcontentview-and-inflater). Lesen Sie diesen Thread schließlich: [Fragmente gegen Aktivitäten und Ansichten] (http://stackoverflow.com/questions/10478233/android-i-need-some-clarifications-of-fragments-vs-activities-and-views) – paulsm4
Inflate bedeutet einfach, von XML in tatsächliche View-Objekte zu übersetzen. findViewById sucht nur das aktuelle View-Objekt, um es zu manipulieren. –