484 votes

Différence entre "@id" et "@+id/" dans Android

Qu'est-ce que la diffirence entre l' @id/ et @+/id?

Comme dans l' @+id/ : Le signe + (plus) indique que nous sommes de créer le nouveau nom de la ressource et il doit être créé et ajouté à notre R.java le fichier mais que dire de l' @id/? Comme à partir de la documentation de l' ID lorsque le référencement d'un Android ID de ressource, vous n'avez pas besoin de la plus-symbole, mais doit ajouter le package android espace de noms, comme suit:

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

Mais comme dans l'image ci-dessous eclipse ne marche pas ce qui suggère m'tout type d' @android:id/.

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

Sont - @id/ et @android:id le même?

J'apprécierais vraiment une de vos idées élaboré exemple.

368voto

Sheikh Aman Points 6671

vous vous référez Android resources , qui sont déjà définis dans le système Android, avec @android:id/.. alors que pour l'accès aux ressources que vous avez défini dans votre projet, vous utilisez @id/..

Plus D'Infos

Comme pour vos précisions dans le chat, vous avez dit que vous avez un problème comme ceci :

Si nous utilisons android:id="@id/layout_item_id" il ne fonctionne pas. Au lieu de cela @+id/ fonctionne alors, quelle est la différence ici? Et c'était ma question initiale.

Eh bien, ça dépend du contexte, lorsque vous êtes à l'aide de l'attribut XML de android:id, alors vous êtes à la définition d'une nouvelle id, et sont instruire l'analyseur (ou appeler le constructeur) pour créer une nouvelle entrée dans R.java, donc vous devez inclure un + signe.

Alors que dans l'autre cas, comme android:layout_below="@id/myTextView" , vous faites référence à un id qui a déjà été créé, alors analyseur de liens ce de la déjà créé id en R.java.

Plus D'Infos Encore

Comme vous l'avez dit dans votre conversation, note qu' android:layout_below="@id/myTextView" ne reconnaît pas un élément avec l'id myTextViewsi elle est écrite après l'élément que vous utilisez.

91voto

schwiz Points 13679

le signe + est un raccourci pour ajouter l'id de la liste de vos id de ressource. Sinon, vous avez besoin de les avoir dans un fichier xml comme ceci

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <item name="my_logo" type="id"/>
</resources>

46voto

Tanmay Mandal Points 13341

Parfois, vous obtenez des références de la mise en page des fichiers comme:

<listview id="@+id/android:list">

et

<listview id="@android:id/list">

Quelle est la différence?

.. Je suis content que vous posiez

@+id/foo signifie que vous êtes la création d'un id nommé foo dans l'espace de noms de votre application. Vous pouvez vous référer à l'aide d' @id/foo. @android:id/foo signifie que vous faites référence à un id défini dans l'android de l'espace de noms.

Le '+' signifie pour créer le symbole s'il n'existe pas déjà. Vous n'en avez pas besoin (et ne devrait pas l'utiliser) lors de la référence à android: les symboles, parce que ceux qui sont déjà définies pour vous par la plate-forme et vous ne pouvez pas faire votre propre espace de noms, de toute façon.

Cet espace est l'espace de noms du cadre. par exemple, vous devez utiliser @android:id/list parce que cette l'id le cadre s'attend à trouver.. (le cadre d'sait uniquement sur les id dans l'android espace de noms).

Complètement copié à partir de cette source

46voto

Nepster Points 893
android:id="@+id/my_button"

+id .. Plus chanter raconte android pour ajouter ou de créer un nouvel id de Ressources.

alors que

android:layout_below="@id/my_button"

il vient de les aider à se référer déjà généré id..

4voto

josephus Points 4865

Il y a un bug avec Eclipse et où, parfois, si vous venez de créer un nouveau @+id/.., il ne sera pas ajouté immédiatement à l'R.java fichier, même après le nettoyage de la construction du projet. La solution est de redémarrer Eclipse.

Ce que je pense devrait être résolu dès que possible, car il peut (et d'expérience) confondre certains développeurs en pensant qu'il ya quelque chose de mal avec leur syntaxe, et essayez de déboguer, même si il n'y a vraiment rien à déboguer.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X