Warum muss @ + id anstelle von @id verwendet werden?

8

Ich kenne den Unterschied zwischen @+id und @id (siehe akzeptierte Antwort ). Ich habe jedoch immer das Gefühl, dass ich den Job des AAPT Compilers mache, wenn ich das '+' in @+id schreibe.

Gibt es einen Grund, warum der Ressourcencompiler nicht von selbst ableiten kann, ob ein Bezeichner erstellt oder einfach wiederverwendet werden muss? Eine zugrunde liegende Hashtabellenstruktur würde die Aufgabe erfüllen: Jede Ressource mit der gleichen ID wird in dieselbe eingefügt Bucket, und wenn der Schlüssel nicht existiert, einfach erstellen.

    
Aurélien Ribon 23.10.2013, 13:12
quelle

3 Antworten

1

Wahrscheinlich könnte der Compiler nicht zwischen einer "richtigen" und einer "falschen" ID unterscheiden. Wenn sie eine neue ID findet (d. H. Eine, die nicht in der zugrundeliegenden Hashtabelle enthalten ist), würde sie immer annehmen, dass es sich um eine richtige neue ID handelt. Es wäre nicht in der Lage, zwischen einer tatsächlichen neuen ID und einer falsch eingegebenen ID zu unterscheiden.

    
Piovezan 23.10.2013 13:22
quelle
1

Ich könnte mir vorstellen, dass es dem Programmierer hilft.

Wenn Sie die @ + ID-Konstruktion nicht benötigen, dann wären alle @id-Referenzen / Konstruktionen gültig, dann wäre es schwierig, einen Fehler aufzuspüren, da der Compiler bei falschen Referenzen nicht fehlschlägt (wie es einfach konstruiert würde) der Tippfehler).

Anders gesagt, müssten alle ID-Referenzfehler zur Laufzeit erkannt werden.

Bearbeiten:

Gerade ist die ähnliche Antwort von Piovezan in Bezug auf Ihren Kommentar aufgefallen:

%Vor%

Dann missbrauchen diese Entwickler die @ + ID Konstruktion imo.

Es ist immer noch viel besser, zwischen @ + id und @id zu unterscheiden, da der Compiler (bei denen, die die @ + ID nicht missbrauchen) eine Chance hat, bei falschen Referenzen einen Fehler bei der Kompilierung anzugeben.

Bearbeiten2

Und um den Kommentar zu adressieren:

%Vor%

Ich glaube, es kann, es ist einfach nicht aufgrund der obigen Argumentation (glaube ich).

    
cYrixmorten 23.10.2013 13:58
quelle
0

mit @ + ID Sie fügen ID zu R.java hinzu, was Ihnen erlaubt, auf Java-Klassen zu verweisen, während Sie mit @id nicht arbeiten. Sie können @id nur verwenden, wenn eine bestimmte ID bereits erstellt wurde und Sie in einer anderen Ansicht darauf verweisen, z. android:layout_below="@id/some_id"

    
kjurkovic 23.10.2013 13:16
quelle

Tags und Links