Posso usar o mesmo id em diferentes layouts no Android?

92

Eu sou novo no desenvolvimento do Android. Posso usar o mesmo ID para imagens e TextViewsem Layoutarquivos XML diferentes ?

Quando o eclipse os lista automaticamente para mim, ele lista todas as variáveis ​​de layout do projeto, então ele colidirá? Até agora não notei nenhum problema em usar o mesmo ID em layouts diferentes, mas estou preocupado com o longo prazo.

Happyhardik
fonte
Postagem relacionada - duas visualizações com o mesmo id
RBT
@Pavel você ainda precisará de ids para ajustar as restrições.
Sadda Hussain

Respostas:

96

É recomendável que você use IDs diferentes para layouts diferentes. No longo prazo, quando você terá muitos layouts e, portanto, muitos ids, será muito complicado diferenciá-los.

Eu costumo citar meus ids como este: layoutName_elementId.

Para mim, consigo encontrar facilmente o id que procuro, especialmente ao usar o preenchimento automático (sei em qual layout estou trabalhando, mas não sei realmente o id; neste caso, com minha estratégia de nomenclatura, eu digite apenas o nome do layout e ele traz todos os ids desse layout).

Mais informações sobre layouts e ids podem ser encontradas aqui .

Boa codificação,

Evangelista Chupamobile
fonte
2
Qual é o problema de procurar digamos ok_buttonem cada atividade sua? O preenchimento automático fica ainda mais claro dessa forma se você conhece o bate-papo que está procurando.
Dan Chaltiel
132

Resposta curta: Sim, você pode.

Resposta longa: você pode fazer isso porque sempre que usar findViewById () para obter uma referência a uma parte do seu layout, o método só procura por essa visualização no layout atualmente inflado. Portanto, mesmo se você tiver outra visualização com o mesmo ID em outro layout, o Android não a procurará lá.

Raghav Sood
fonte
15
Você pode dar uma resposta ainda mais longa? Como R.id.layout_id é um inteiro estático e é pré-determinado no momento da compilação, findViewById () não saberá o layout atual inflado.
Chloe,
22
Para o bem de qualquer pessoa que tenha essa pergunta, eu queria responder ao pedido de Chloe. O ID seria o mesmo para cada visualização, mas nunca aparecerá duas vezes na mesma atividade. Como metáfora, considere o que aconteceria se eu lhe desse uma pilha de papéis, todos com um monte de números. Várias dessas folhas de papel têm o número 4 escrito nelas. Você está olhando para uma das folhas e peço que circule o 4. Isso é fácil. Agora você olha para outra folha com um 4 nela. Você também pode encontrar e circular isso. Não importa que o número seja definido com antecedência.
Ted Cannelongo
6
Não concordo com o comentário do Ted, você pode ter ao mesmo tempo dois componentes com o mesmo ID rodando na mesma Activity. Acabei de ter o problema em um aplicativo, estava usando dois ViewPager diferentes ao mesmo tempo na atividade principal. Quando tentei recuperar o ViewPager atualmente exibido com o ID, ele na verdade recuperou o outro em execução em segundo plano. Corrigi o problema simplesmente tornando os dois IDs exclusivos.
Yoann Hercouet
9
@YoannHercouet Acredito que isso seja porque ambos estavam na mesma planilha (Atividade)
Naheel
22

De acordo com os guias de API do desenvolvedor:

Um ID não precisa ser único em toda a árvore, mas deve ser único dentro da parte da árvore que você está pesquisando (que geralmente pode ser a árvore inteira, portanto, é melhor ser totalmente exclusivo quando possível).

Portanto, a resposta curta é que não é obrigatório, mas é uma boa prática para evitar possíveis conflitos.

Alex Epelde
fonte
1
Certa vez, criei os mesmos ids por acidente. Removê-los mais tarde deu muito trabalho, porque todas as instâncias foram reanimadas. Isso significa que uma vez que você tem um conflito de id, você está ferrado. Vai ser muito difícil separar tudo de volta.
t3chb0t
@ t3chb0t De verdade! Mesmo se você marcar "somente local", o Android Studio renomeia todas as instâncias. É absolutamente ridículo.
John Glen
15

Não recomendado, porque se no futuro você precisar refatorar o view id, o Android Studio irá refatorá-lo em todos os XMLarquivos e classes e você terá problemas.

Mas também há alguns casos em que você precisa usar o mesmo, idpor exemplo, se você tiver algum resumo e reutilizar vários layouts.

No caso de você ter vários viewscom o mesmo id'sem seu projeto e precisar refatorar, faça-o manualmente, não use a função build in IDE, mude idna visualização de destino dentro do XMLlayout e então corrija o erro vermelho dentro do layout.

Pavel Poley
fonte