68 Stimmen

Aktivität Layout: Fragment Klasse: vs Android:name Attribute

Ich habe die Dokumentation über Fragmente im Android Developer Guide und ich habe gesehen, dass sie manchmal die zu instanzierende Klasse mit dem Fragment-Tag-Attribut angeben Android:Name und manchmal verwenden sie die Klasse: Attribut:

<fragment
    android:name="com.example.news.ArticleReaderFragment"
    android:id="@+id/viewer"
    android:layout_weight="2"
    android:layout_width="0dp"
    android:layout_height="match_parent" />

<fragment
    class="com.example.android.apis.app.FragmentLayout$TitlesFragment"
    android:id="@+id/titles" 
    android:layout_weight="1"
    android:layout_width="0px" 
    android:layout_height="match_parent" />

Sind Android:Name et Klasse: austauschbar? Wenn ich die Autovervollständigungsfunktion in Eclipse verwende, zeigen beide denselben Dokumentationshinweis an (d. h. das Attribut liefert den zu instanziierenden Klassennamen). Vielleicht müssen Sie den zweiten verwenden, wenn die zu instanzierende Klasse einen anderen Namen hat als der Name der Java-Datei, z. B. TitelFragment die sich in der FragmentLayout.java Datei? Oder kann ich die folgende Syntax verwenden package.fileDOTjava$Class auch mit dem Android:Name Attribut?

Ich hätte gerne eine Dokumentation für XML-Tags und -Attribute wie für Android-Java-Klassen (ich habe in einem anderen Forum danach gefragt). Frage ).

45voto

far.be Punkte 689

Wie Activity.onCreateView Quelle sagt:

String fname = attrs.getAttributeValue(null, "class");
TypedArray a = context.obtainStyledAttributes(attrs, com.android.internal.R.styleable.Fragment);
if (fname == null) {
    fname = a.getString(com.android.internal.R.styleable.Fragment_name);
}

Das bedeutet anscheinend, dass das Programm zuerst nach dem Attribut "Klasse" sucht. Und bei einem Fehlschlag sucht es nach dem Attribut "name". Soweit es also wahr ist, ist die Verwendung von "class" effizienter.

26voto

CommonsWare Punkte 950864

Sind Android:name und class: austauschbar?

Vermutlich, ja. Ich habe nur verwendet class und das scheint in den meisten Beispielen von Google verwendet zu werden, aber ich sehe auch, wo sie android:name in einigen Proben. Leider gibt es keine formale und vollständige Dokumentation für <fragment> .

0voto

AndroUser Punkte 562

Tut mir leid, dass alle Experten hier sind, ich kann mich irren, aber nach meinem Wissen Android:Name Attribut des Fragments wird verwendet, um das Fragment zu finden, wenn wir getFragmentByTag() Methode der Klasse fragmentManager. auch Android:Klasse Attribut wird verwendet, um die Fragmentklasse zu finden, die wir im Allgemeinen für statisches Fragment .

Ich hoffe, das hilft. danke

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X