¿Puedo usar la misma identificación en un diseño diferente en Android?

90

Soy nuevo en el desarrollo de Android. ¿Está bien usar el mismo ID para imágenes y TextViewsen diferentes Layoutarchivos XML?

Cuando eclipse los enumera automáticamente para mí, enumera todas las variables de diseño del proyecto, entonces, ¿colisionará? Hasta ahora no he notado ningún problema al usar la misma ID en diferentes diseños, pero estoy preocupado a largo plazo.

happyhardik
fuente
Publicación relacionada - dos vistas con la misma identificación
RBT
@Pavel, aún necesitará identificadores para ajustar las restricciones.
Sadda Hussain

Respuestas:

96

Se recomienda que utilice diferentes ID para diferentes diseños. A largo plazo, cuando tenga muchos diseños y, por lo tanto, muchos identificadores, será muy complicado diferenciarlos.

Por lo general el nombre de mi identificadores de la siguiente manera: layoutName_elementId.

Me funciona 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 nomenclatura, solo escriba el nombre del diseño y aparecerá todos los identificadores de ese diseño).

Puede encontrar más información sobre diseños e identificadores aquí .

Feliz codificación,

Evangelista chupamobile
fuente
2
¿Cuál es el problema de buscar digamos ok_buttonen cada actividad tuya? El autocompletado es aún más claro de esa manera si sabe que está buscando el chat.
Dan Chaltiel
132

Respuesta corta: Sí, puedes.

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

Raghav Sood
fuente
15
¿Puedes dar una respuesta aún más larga? Debido a que R.id.layout_id es un número entero estático, y está predeterminado en el momento de la compilación, findViewById () no conocerá el diseño inflado actualmente.
Chloe
22
Por el bien de cualquier otra persona que se encuentre con esta pregunta, quería responder a la solicitud de Chloe. El ID sería el mismo para cada vista, pero nunca aparecerá dos veces en la misma actividad. Como metáfora, considere lo que sucedería si le diera una pila de papeles, todos con un montón de números. Varias de estas hojas de papel tienen escrito el número 4. Estás mirando una de las hojas y te pido que marques con un círculo el 4. Esto es fácil. Ahora mira otra hoja con un 4 en ella. También puede encontrarlo y rodearlo. No importa que el número esté definido de antemano.
Ted Cannelongo
6
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 la ID, en realidad recuperó el otro que se estaba ejecutando en segundo plano. Solucioné el problema simplemente haciendo que las dos ID sean únicas.
Yoann Hercouet
8
@YoannHercouet Creo que esto se debe a que ambos estaban en la misma hoja (Actividad)
Naheel
22

Según las guías de API para desarrolladores:

No es necesario que una identificación sea única en todo el árbol, pero debe ser única dentro de la parte del árbol que está buscando (que a menudo puede ser todo el árbol, por lo que es mejor ser completamente único cuando sea posible).

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

Alex Epelde
fuente
1
Una vez creé los mismos identificadores por accidente. Cambiarles el nombre más tarde supuso mucho trabajo porque todas las instancias se reanudaron. Esto significa que una vez que tienes un conflicto de identificación, estás jodido. Será muy difícil volver a separarlo todo.
t3chb0t
@ t3chb0t ¡De verdad! Incluso si marca "solo local", Android Studio cambia el nombre de todas las instancias. Es absolutamente ridículo.
John Glen
15

No recomendado, porque si en el futuro necesitas refactorizar el view id, Android Studio lo refactorizará en todos los XMLarchivos y clases y te meterás en problemas.

Pero también hay algunos casos en los que necesita usar el mismo, idpor ejemplo, si tiene algún resumen y reutiliza varios diseños.

En caso de que tenga varios viewscon lo mismo id'sen su proyecto y necesite refactorizar, hágalo manualmente, no use la función de compilación en IDE, cambie la idvista de destino dentro del XMLdiseño y luego corrija el error rojo dentro del diseño.

Pavel Poley
fuente