Kann ich dieselbe ID in einem anderen Layout in Android verwenden?

90

Ich bin neu in der Android-Entwicklung. Ist es in Ordnung, dieselbe ID für Bilder und TextViewsin verschiedenen LayoutXML-Dateien zu verwenden?

Wenn Eclipse sie automatisch für mich auflistet, werden alle Layoutvariablen aus dem Projekt aufgelistet. Wird es also kollidieren? Bis jetzt habe ich keine Probleme bei der Verwendung derselben ID in verschiedenen Layouts bemerkt, aber ich bin auf lange Sicht besorgt.

happyhardik
quelle
In Verbindung stehender Beitrag - zwei Ansichten mit derselben ID
RBT
@Pavel Sie benötigen weiterhin IDs, um Einschränkungen anzupassen.
Sadda Hussain

Antworten:

96

Es wird empfohlen, unterschiedliche IDs für unterschiedliche Layouts zu verwenden. Auf lange Sicht wird es sehr kompliziert, sie zu unterscheiden, wenn Sie viele Layouts und daher viele IDs haben.

Normalerweise benenne ich meine IDs so : layoutName_elementId.

Es funktioniert für mich, die gesuchte ID leicht zu finden, insbesondere bei Verwendung der automatischen Vervollständigung (ich weiß, an welchem ​​Layout ich arbeite, aber ich kenne die ID nicht wirklich; in diesem Fall mit meiner Namensstrategie ich Geben Sie nur den Layoutnamen ein und es werden alle IDs dieses Layouts angezeigt.

Weitere Informationen zu Layouts und IDs finden Sie hier .

Viel Spaß beim Codieren,

Chupamobile Evangelist
quelle
2
Was ist das Problem bei der Suche, sagen wir ok_buttonbei jeder Ihrer Aktivitäten? Die automatische Vervollständigung wird auf diese Weise noch deutlicher, wenn Sie den gewünschten Chat kennen.
Dan Chaltiel
129

Kurze Antwort: Ja, das kannst du.

Lange Antwort: Sie können dies tun, da die Methode immer dann, wenn Sie findViewById () verwenden, um einen Verweis auf einen Teil Ihres Layouts abzurufen, nur im aktuell aufgeblasenen Layout nach dieser Ansicht sucht. Selbst wenn Sie eine andere Ansicht mit derselben ID in einem anderen Layout haben, wird Android dort nicht danach suchen.

Raghav Sood
quelle
15
Können Sie eine noch längere Antwort geben? Da R.id.layout_id eine statische Ganzzahl ist und zur Kompilierungszeit vorbestimmt ist, kennt findViewById () das aktuell aufgeblasene Layout nicht.
Chloe
22
Für alle anderen, die auf diese Frage stoßen, wollte ich Chloes Anfrage beantworten. Die ID ist für jede Ansicht gleich, wird jedoch niemals zweimal in derselben Aktivität angezeigt. Überlegen Sie sich als Metapher, was passieren würde, wenn ich Ihnen einen Stapel Papiere mit einer Reihe von Zahlen geben würde. Auf einigen dieser Blätter ist die Nummer 4 geschrieben. Sie sehen sich eines der Blätter an und ich bitte Sie, die 4 zu kreisen. Das ist einfach. Jetzt sehen Sie sich ein anderes Blatt mit einer 4 an. Sie können das auch finden und umkreisen. Es spielt keine Rolle, dass die Nummer im Voraus definiert wird.
Ted Cannelongo
6
Ich bin mit Teds Kommentar nicht einverstanden. Sie können gleichzeitig zwei Komponenten mit derselben ID in derselben Aktivität ausführen. Ich hatte gerade das Problem mit einer App. In der Hauptaktivität habe ich zwei verschiedene ViewPager gleichzeitig verwendet. Als ich versuchte, den aktuell mit der ID angezeigten ViewPager abzurufen, wurde tatsächlich der andere im Hintergrund ausgeführte ViewPager abgerufen. Ich habe das Problem behoben, indem ich einfach die beiden IDs eindeutig gemacht habe.
Yoann Hercouet
8
@ YoannHercouet Ich glaube, das liegt daran, dass beide auf dem gleichen Blatt waren (Aktivität)
Naheel
21

Laut Entwickler-API-Handbüchern:

Eine ID muss nicht im gesamten Baum eindeutig sein, sondern sollte in dem Teil des Baums, den Sie suchen, eindeutig sein (dies kann häufig der gesamte Baum sein, daher ist es am besten, wenn möglich vollständig eindeutig zu sein).

Die kurze Antwort lautet also, dass dies nicht obligatorisch ist, aber es ist eine gute Praxis, mögliche Konflikte zu vermeiden.

Alex Epelde
quelle
Ich habe einmal versehentlich dieselben IDs erstellt. Das spätere Umbenennen war eine Menge Arbeit, da alle Instanzen erneut aktiviert wurden. Dies bedeutet, sobald Sie einen ID-Konflikt haben, sind Sie geschraubt. Es wird sehr schwierig sein, alles wieder zu trennen.
t3chb0t
15

Nicht empfohlen, da view idAndroid Studio es in allen XMLDateien und Klassen umgestalten wird , wenn Sie das in Zukunft umgestalten müssen , und Sie in Schwierigkeiten geraten.

Es gibt jedoch auch Fälle, in denen Sie dasselbe verwenden müssen, idz. B. wenn Sie eine Zusammenfassung haben und mehrere Layouts wiederverwenden.

Wenn Sie mehrere viewsmit demselben id'sin Ihrem Projekt haben und umgestalten müssen, tun Sie dies manuell, verwenden Sie keine eingebaute IDE-Funktion, ändern Sie die idin der Zielansicht im XMLLayout und beheben Sie den roten Fehler im Layout.

Pavel Poley
quelle