2012-09-08 18 views
61

Soy nuevo en el desarrollo de Android. ¿Está bien usar la misma ID para imágenes y TextViews en diferentes archivos XML Layout?¿Puedo usar la misma identificación en diferente diseño en Android?

Cuando eclipse las lista automáticamente para mí, enumera todas las variables de diseño del proyecto, ¿colisionará? Hasta ahora no he notado ningún problema con el mismo ID en diferentes diseños, pero me preocupa a largo plazo.

+0

FYI: considere [utilizando enlace de datos] (https://medium.com/google-developers/no-more-findviewbyid-457457644885) – Pavel

Respuesta

66

Se recomienda que use diferentes ID para diferentes diseños. A la larga, cuando tengas muchos diseños y, por lo tanto, muchos identificadores, será muy complicado diferenciarlos.

Normalmente nombre mis identificaciones como esta: layoutName_elementId.

Funciona para mí encontrar fácilmente la identificación que estoy buscando, especialmente cuando uso la función de autocompletar (sé en qué diseño estoy trabajando, pero realmente no conozco la identificación, en este caso, con mi estrategia de nombres, solo tecleo el nombre del diseño y trae todos los identificadores de ese diseño).

Se puede encontrar más información sobre diseños e identificadores en here.

codificación feliz,

+1

¿Cuál es el problema de buscar digamos 'ok_button' en cada actividad suya? El autocompletado es incluso más claro si conoces el chat que estás buscando. –

102

Respuesta corta: Sí, puede.

Respuesta larga: Puede hacerlo porque cada vez que utiliza findViewById() para obtener una referencia a una parte de su diseño, el método solo busca esa vista en el diseño actualmente inflado. Entonces, incluso si tiene otra vista con la misma ID en otro diseño, Android no la buscará allí.

+11

¿Puede dar una respuesta aún más larga? Como R.id.layout_id es un entero estático y está predeterminado en el momento de la compilación, findViewById() no conocerá el diseño actualmente inflado. – Chloe

+11

Por el bien de cualquier otra persona que se encuentre con esta pregunta, quería responder a la solicitud de Chloe. La ID sería la misma para cada vista, pero nunca aparecerá dos veces en la misma actividad. Como metáfora, considere qué pasaría si le di una pila de papeles, todos con un montón de números. Varias de estas hojas de papel tienen el número 4 escrito en ellas. Estás mirando una de las hojas, y te pido que encierres un círculo en 4. Esto es fácil. Ahora mira otra hoja con un 4 en ella. Usted puede encontrar y rodear eso también. No importa que el número esté definido de antemano. –

+3

No estoy de acuerdo con el comentario de Ted, puede tener al mismo tiempo dos componentes con la misma ID ejecutándose en la misma actividad. Acabo de tener el problema en una aplicación, estaba usando dos ViewPager diferentes al mismo tiempo en la actividad principal. Cuando traté de recuperar el ViewPager que se muestra actualmente con el ID, en realidad recuperó el otro ejecutándose en segundo plano. Solucioné el problema simplemente haciendo que los dos ID fueran únicos. –

12

según el desarrollador guías API:

Un ID no tiene que ser único en todo el árbol, pero debería ser único dentro de la parte del árbol que está buscando (que a menudo puede ser el árbol completo, por lo que es mejor ser completamente único cuando es posible ).

Así que la respuesta corta es que no es obligatorio, pero es una buena práctica para evitar posibles conflictos.

Cuestiones relacionadas