In meine Layout-XML-Datei habe ich eine andere Layout-XML-Datei aufgenommen (jede mit einer anderen Android-ID).
<include layout="@layout/view_contact_name" android:id="+id/test1"/>
<include layout="@layout/view_contact_name" android:id="+id/test2"/>
Aber wenn ich es im Emulator ausführe und den Hierarchy Viewer starte, zeigt jedes Layout immer noch 'NO_ID' an, und in meinem Code habe ich
findViewById(R.id.test1)
undfindViewById(R.id.test2)
beide geben null zurück.
Kann mir bitte jemand bei meinem Problem helfen?
android
android-layout
hap497
quelle
quelle
@
Symbol.Antworten:
Geben Sie die ID in der an
<include>
Verwenden Sie dann zwei,
findViewById
um auf Felder im Layout zuzugreifenMit diesem Ansatz können Sie auf jedes Feld in einem beliebigen Include zugreifen.
quelle
merge
auch theoretisch nicht funktionieren , da das Ergebnis des Einfügens von amerge
nicht eine einzelne Ansicht ist, sondern eine Menge von ihnen. Also ist es OK.Ich habe herausgefunden, dass, wenn Sie ein
<merge>
Tag in Ihrem Include-Layout verwenden, die ID des Include auf das Merge-Tag übertragen wird, was keine echte Ansicht ist.Entfernen Sie also entweder die Zusammenführung oder ersetzen Sie sie durch ein Layout.
Tor Norbye schrieb :
quelle
Romain Guy gibt an, dass Sie die ID eines enthaltenen Layouts überschreiben können, indem Sie ein
android:id
Attribut in das<include>
Tag einfügen.quelle
Ich denke, die Top-Antwort verfehlt den wichtigsten Punkt und könnte die Leute dazu verleiten, das zu denken
<include/>
Tag eine Ansicht erstellt, die den Include-Inhalt enthält.Der entscheidende Punkt ist , dass die umfassen id ist vergangen an die Stammansicht der Includes Layout - Datei.
Das bedeutet, dass dies:
Wird dies:
quelle
Ja ist so, aber vorsichtig, wenn das in das Include-Feld eingefügte Layout ein benutzerdefiniertes ist und Sie auf dieses Root-Layout zugreifen möchten. Dieses Layout in diesem Fall @ layout / test test wird tatsächlich in der ersten Zeile zurückgegeben.
quelle
quelle
Das Problem ist, dass wir versuchen, eine ID zu verwenden, die in der aktuellen Layoutdatei nicht deklariert ist. Anstatt erneut zu deklarieren, kann id einfach mit referenziert werden
@+id/
. Wenn Sie den ursprünglichen ID-Namen über Android Studio umgestalten, wird er auch im enthaltenen Layout umgestaltet.quelle
Wenn Sie
<RecyclerView>
find verwenden, finden Sie die ID<include>
von mithilfe einer Instanz der aufgeblasenen Ansicht, oder es wird null zurückgegeben .quelle
Wenn Sie die ID entweder auf das Root-Tag des enthaltenen Layouts festgelegt haben, können Sie diese ID verwenden oder die ID auf das enthaltene Layout festlegen.
Sie können die ID jedoch nicht auf beide setzen, da dies eine Ausnahme auslösen kann.
Oder
quelle
Wenn Sie über Include sprechen, haben Sie entweder eine ID in der Stammansicht in der enthaltenen Layoutdatei oder in der Include-Zeile selbst und nicht in beiden. Beispielsweise:
Layout 1 Datei
Das obige Beispiel ist falsch, da technisch gesehen zwei IDs für dasselbe Layout deklariert sind. Sie müssen also auswählen, welches Element die ID haben soll.
quelle
Wow, ich kann nicht glauben, dass diese Frage noch nicht die richtige Antwort hat. Es ist einfach Tags saugen. Sie können nur die Dinge ändern , die mit beginnen ,
android:layout_
wasandroid:id
nicht übereinstimmt. Die Antwort ist also, dass Sie nicht können. Es tut uns leid. Stattdessen können Sie eine Klasse erstellen, die eine ViewGroup ist, die die darin enthaltenen Ansichten aufbläst, und diese dann als Tag in Ihr Layout einfügen, aber das war es auch schon.quelle