494 Stimmen

Unterschied zwischen "@id/" und "@+id/" in Android

Was ist der Unterschied zwischen dem @id/ y @+id/ ?

Unter @+id/ das Pluszeichen + weist an, einen neuen Ressourcennamen zu erstellen und in die R.java Datei, aber was ist mit @id/ ? Aus der Dokumentation von ID : beim Verweis auf eine Android-Ressource ID brauchen Sie das Plus-Symbol nicht, sondern müssen den Namespace des Android-Pakets hinzufügen, etwa so:

android:id="@android:id/list"

In der folgenden Abbildung schlägt Eclipse jedoch keine Art von @android:id/ .

Image showing the suggestion for the @/id and @+/id

Sind @id/ y @android:id/ dasselbe?

6voto

Jeff Axelrod Punkte 26503

Von der Leitfaden für Entwickler :

android:id="@+id/my_button"

Das at-Zeichen ( @ ) am Anfang der Zeichenkette zeigt an, dass der XML-Parser den Rest der ID-Zeichenkette parsen und expandieren und sie als ID-Ressource identifizieren soll. Das Plus-Symbol ( + ) bedeutet, dass dies ein neuer Ressourcenname ist, der erstellt und zu unseren Ressourcen hinzugefügt werden muss (in der R.java Datei). Es gibt eine Reihe weiterer ID-Ressourcen, die vom Android-Framework angeboten werden. Wenn Sie eine Android-Ressourcen-ID referenzieren, brauchen Sie das Plus-Symbol nicht, sondern müssen das android Namespace des Pakets, etwa so:

android:id="@android:id/empty"

6voto

Kunal Sale Punkte 111

Der Unterschied zwischen @+id y @id ist:

  • @+id wird verwendet, um eine ID für eine Ansicht in R.java Datei.
  • @id wird verwendet, um auf die für die Ansicht in der Datei R.java erstellte ID zu verweisen.

Wir verwenden @+id con android:id="" Aber was ist, wenn die ID nicht erstellt wird und wir auf sie verweisen, bevor sie erstellt wird (Forward Referencing).

In diesem Fall müssen wir @+id zu erstellen, und bei der Definition der Ansicht müssen wir auf sie verweisen.

Bitte beachten Sie den unten stehenden Code:

<RelativeLayout>

     <TextView
        android:id="@+id/dates"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_toLeftOf="@+id/spinner" />

   <Spinner
     android:id="@id/spinner"
     android:layout_width="96dp"
     android:layout_height="wrap_content"
     android:layout_below="@id/dates"
     android:layout_alignParentRight="true" />

</RelativeLayout>

In dem obigen Code, id für Spinner @+id/spinner wird in einer anderen Ansicht erstellt, und bei der Definition des Spinners beziehen wir uns auf die oben erstellte ID.

Wir müssen also die ID erstellen, wenn wir die Ansicht verwenden, bevor die Ansicht erstellt wurde.

4voto

Olegas Punkte 10009

@id/ y @android:id/ ist nicht dasselbe.

@id/ ID in Ihrer Anwendung referenzieren, @android:id/ die auf ein Element in der Android-Plattform verweisen.

Eclipse ist falsch.

4voto

josephus Punkte 8232

Es gibt einen Fehler in Eclipse, der manchmal auftritt, wenn man gerade eine neue @+id/.. wird sie nicht sofort zur Datei R.java hinzugefügt, auch nicht nach einem Clean-Build des Projekts. Die Lösung besteht darin, Eclipse neu zu starten.

Dies sollte meiner Meinung nach so schnell wie möglich gelöst werden, denn es kann (und wird erfahrungsgemäß) einige Entwickler verwirren, die denken, dass mit ihrer Syntax etwas nicht stimmt, und versuchen, sie zu debuggen, auch wenn es eigentlich nichts zu debuggen gibt.

4voto

Tanuj Nayak Punkte 607

Android verwendet einige Dateien namens Ressourcen, in denen Werte für die XML-Dateien gespeichert werden.

Wenn Sie nun @id/ für ein XML-Objekt verwenden, versucht es, auf eine ID zu verweisen, die bereits in den Wertedateien registriert ist. Wenn Sie hingegen @+id/ verwenden, wird eine neue ID in den Wertedateien registriert, wie das "+"-Symbol andeutet.

Ich hoffe, das hilft :).

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