128 votes

Comment spécifier l'identifiant lors de l'utilisation de l'include dans le fichier xml de mise en page ?

Dans mon fichier xml de mise en page, j'ai inclus un autre fichier xml de mise en page (chacun avec un identifiant Android différent).

<include layout="@layout/view_contact_name" android:id="+id/test1"/>
<include layout="@layout/view_contact_name" android:id="+id/test2"/>

Mais lorsque je l'exécute dans l'émulateur, et que je lance Hierarchy Viewer, chacun des disposition montre toujours 'NO_ID', et dans mon code, j'ai findViewById(R.id.test1) et findViewById(R.id.test2) les deux retournent null.

Quelqu'un peut-il m'aider à résoudre mon problème ?

312voto

Ron Romero Points 2343

Spécifiez l'ID dans le champ <include>

<include layout="@layout/test" android:id="@+id/test1" />

Ensuite, utilisez deux findViewById pour accéder aux rubriques du modèle

View test1View = findViewById(R.id.test1);
TextView test1TextView = (TextView) test1View.findViewById(R.id.text);

En utilisant cette approche, vous pouvez accéder à n'importe quel champ dans n'importe quelle inclusion que vous avez.

66voto

loki19 Points 21

J'ai découvert que si vous utilisez dans votre layout include

<merge> 

puis l'ID de l'inclusion est transféré à l'étiquette de fusion qui n'est pas une vue réelle. Donc soit vous supprimez merge, soit vous le remplacez par un autre Layout.

Tor Norbye a écrit :

La balise n'est pas une vraie vue, donc findByView ne la trouvera pas. L'attribut @id (et tout autre attribut que vous avez défini sur la balise include) est appliqué à la balise Root de la présentation incluse. Ainsi, votre activity.getView(R.id.included1) devrait en fait être le lui-même.

44voto

Daniel Yankowsky Points 3719

Romain Guy indique que vous pouvez remplacer l'ID d'une mise en page incluse en plaçant une balise android:id à l'intérieur de l'élément <include> étiquette.

<include android:id="@+id/cell1" layout="@layout/workspace_screen" />

4voto

jokernk Points 281

Oui, c'est comme ça, mais attention lorsque la mise en page insérée dans le champ d'inclusion est une mise en page personnalisée et que vous voulez accéder à cette mise en page racine. Cette mise en page, dans ce cas @layout/test test, est en fait retournée dans la première ligne.

test test1View = (test)findViewById(R.id.test1);

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