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) und findViewById(R.id.test2) beide geben null zurück.
Mit diesem Ansatz können Sie auf jedes Feld in jedem Include zugreifen, das Sie haben.
Diese Methode gibt mir einen Nullwert für das test1View-Objekt zurück.
– Nirav Schah
24. Dezember 2012 um 14:25 Uhr
Ich sehe den Unterschied nicht wirklich, kannst du das erklären?
– Goddchen
19. Juni 2013 um 19:02 Uhr
Ich habe herausgefunden, dass dies nicht hilft, wenn das Layout, das wir enthalten, Merge verwendet. Aber wenn Zusammenführen nicht verwendet wird, funktioniert dies.
– Zlatko
29. Juli 2013 um 12:20 Uhr
@Zlatko Ja, und das kann nicht funktionieren merge sogar in der Theorie, weil das Ergebnis der Aufnahme von a merge ist nicht eine einzelne Ansicht, sondern ein Bündel von ihnen. Also ist es in Ordnung.
Ich habe herausgefunden, dass, wenn Sie verwenden <merge> -Tag in Ihrem Include-Layout, dann wird die ID des Include-Tags an das Merge-Tag übertragen, das keine echte Ansicht ist.
Entfernen Sie also entweder die Zusammenführung oder ersetzen Sie sie durch ein Layout.
Das <include> tag ist keine echte Ansicht, also wird findByView es nicht finden. Das Attribut @id (und alle anderen Attribute, die Sie für das Include-Tag festgelegt haben) wird stattdessen auf das Stamm-Tag des eingeschlossenen Layouts angewendet. Ihre activity.getView(R.id.included1) sollte also tatsächlich die sein <TextView> selbst.
Gut. Ich entferne das Merge-Tag und es fängt an zu funktionieren, aber meine Frage hier ist, wie wird das Merge-Tag verwendet, wenn ein Layout ohne es funktioniert?
– Ankur Chaudhary
24. September 2015 um 4:59 Uhr
Romain Guy zeigt an dass Sie die ID eines enthaltenen Layouts überschreiben können, indem Sie ein setzen android:id Attribut innerhalb der <include> Schild.
Das ist richtig. Das Root-Element in der eingebundenen Layout-Datei kann über die im ‘include’-Tag angegebene ID referenziert werden (es sei denn, sie ist nicht angegeben).
– An Herrn
20. September 2013 um 9:48 Uhr
ID in = Root-ID im eingeschlossenen Layout
– Fadel
2. Juli 2015 um 2:02 Uhr
Es scheint mir, wenn ich zuerst die ID setze (im Include-Tag überschreibt es die ID aus dem enthaltenen Layout, oder?), Ich habe das Include-Tag zunächst ‚@+id/cell1‘ und dann das Layout = ‚ @layout/workspace_screen’ überschreibt die android:id erneut mit der ID des enthaltenen Layouts. Die Antworten von @ Ron Romero machen für mich mehr Sinn.
– Neon Warge
13. Dezember 2015 um 13:29 Uhr
Ich denke, die oberste Antwort verfehlt den wichtigsten Punkt und könnte die Leute dazu verleiten, das zu denken <include/> -Tag erstellt eine Ansicht, die den Include-Inhalt enthält.
Der entscheidende Punkt ist, dass Include’s Ich würde ist bestanden zur Stammansicht der Layoutdatei des Include.
yes ist so, aber seien Sie 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.
test test1View = (test)findViewById(R.id.test1);
Gemeinschaft
Sie müssen für jedes Include-Tag eine ID festlegen
Eingeschlossenes untergeordnetes Element legt eine neue ID fest. Wenn Sie sehen, wie Sie eine neue ID generieren, sehen Sie sich diesen Eintrag an: https://stackoverflow.com/a/15442898/1136117
Prakasch
Das Problem ist, dass wir versuchen, eine ID zu verwenden, die nicht in der aktuellen Layoutdatei deklariert ist. Anstatt erneut zu deklarieren, kann id einfach mit bezogen werden @+id/. Wenn Sie den ursprünglichen ID-Namen über Android Studio umgestalten, wird er auch im enthaltenen Layout umgestaltet.
Ihre Ausweise fehlen
@
Symbol.– AutonomeApps
8. Februar 2017 um 18:33 Uhr