99 votes

Puis-je utiliser le même identifiant dans différentes mises en page dans Android ?

Je suis novice en matière de développement Android. Est-il possible d'utiliser le même ID pour les images et les TextViews dans différents Layout Fichiers XML ?

Quand Eclipse les liste automatiquement pour moi, il liste toutes les variables de mise en page du projet, donc cela va-t-il entrer en collision ? Jusqu'à présent, je n'ai pas remarqué de problèmes en utilisant le même ID dans différentes dispositions, mais je suis inquiet à long terme.

0 votes

0 votes

@Pavel vous aurez toujours besoin des ids pour ajuster les contraintes.

145voto

Raghav Sood Points 43264

Réponse courte : Oui, c'est possible.

Réponse longue : Vous pouvez le faire parce que chaque fois que vous utilisez findViewById() pour obtenir une référence à une partie de votre disposition, la méthode ne recherche que cette vue dans la disposition actuellement gonflée. Ainsi, même si vous avez une autre vue avec le même ID dans une autre disposition, Android ne la cherchera pas là.

16 votes

Pouvez-vous donner une réponse encore plus longue ? Parce que R.id.layout_id est un entier statique, et est prédéterminé au moment de la compilation, donc findViewById() ne connaîtra pas la disposition actuellement gonflée.

24 votes

Pour le bien de tous ceux qui rencontreront cette question, je tenais à répondre à la demande de Chloé. L'identifiant sera le même pour chaque vue, mais n'apparaîtra jamais deux fois dans la même activité. En guise de métaphore, imaginez ce qui se passerait si je vous donnais une pile de feuilles de papier sur lesquelles figureraient un certain nombre de chiffres. Plusieurs de ces feuilles de papier portent le chiffre 4. Vous regardez l'une de ces feuilles et je vous demande d'entourer le 4. C'est facile. Maintenant, tu regardes une autre feuille sur laquelle il y a un 4. Tu peux le trouver et l'entourer aussi. Le fait que le nombre soit défini à l'avance n'a pas d'importance.

6 votes

Je ne suis pas d'accord avec le commentaire de Ted, vous pouvez avoir en même temps deux composants avec le même ID fonctionnant sur la même activité. Je viens d'avoir ce problème sur une application, j'utilisais deux ViewPager différents en même temps dans l'activité principale. Lorsque j'ai essayé de récupérer le ViewPager actuellement affiché avec l'ID, il a en fait récupéré l'autre ViewPager fonctionnant en arrière-plan. J'ai résolu le problème en rendant les deux ID uniques.

99voto

Il est recommandé d'utiliser des identifiants différents pour les différentes mises en page. À long terme, lorsque vous aurez beaucoup de modèles et donc beaucoup d'identifiants, il deviendra très compliqué de les différencier.

J'ai l'habitude de nommer mes identifiants comme suit : layoutName_elementId .

Cela me permet de trouver facilement l'identifiant que je recherche, en particulier lorsque j'utilise la saisie semi-automatique (je sais sur quelle mise en page je travaille, mais je ne connais pas vraiment l'identifiant ; dans ce cas, avec ma stratégie de nommage, je tape seulement le nom de la mise en page et cela fait apparaître tous les identifiants de cette mise en page).

Pour plus d'informations sur les schémas de configuration et les identifiants, voir aquí .

Bon codage,

3 votes

Quel est le problème de rechercher, disons ok_button dans chacune de vos activités ? L'autocomplétion est encore plus claire si vous savez ce que vous cherchez.

22voto

Alex Epelde Points 534

Selon les guides API des développeurs :

Un identifiant ne doit pas nécessairement être unique pour l'ensemble de l'arbre, mais il doit être unique dans la partie de l'arbre que vous recherchez (qui peut souvent être l'arbre entier, il est donc préférable qu'il soit complètement possible).

La réponse courte est donc que ce n'est pas obligatoire, mais qu'il s'agit d'une bonne pratique pour éviter d'éventuels conflits.

18voto

Pavel Poley Points 402

Ce n'est pas recommandé, car si à l'avenir vous devez remanier le fichier view id Android studio va le remanier dans tous les cas. XML fichiers et des classes et vous aurez des problèmes.

Mais dans certains cas, il est nécessaire d'utiliser la même méthode. id par exemple, si vous avez un résumé et que vous réutilisez plusieurs mises en page.

Si vous avez plusieurs views avec le même id's dans votre projet et que vous avez besoin de refactoriser, faites-le manuellement, n'utilisez pas la fonction de construction de l'IDE, modifiez le fichier id dans la vue cible à l'intérieur de XML puis corriger l'erreur rouge à l'intérieur de la mise en page.

Mise à jour :

Actuellement, Android studio supporte le refactoring avec l'option "refactor in current file only".

Update:ViewBinding

Vous pouvez obtenir une exception de casting si vous avez des mises en page imbriquées (balise include) avec des identifiants de vue qui entrent en conflit avec des identifiants dans sa hiérarchie.

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