2012-09-08 17 views
61

Sono nuovo nello sviluppo di Android. È corretto utilizzare lo stesso ID per le immagini e TextViews in diversi file XML Layout?Posso usare lo stesso id in layout diversi in Android?

Quando eclissi li elenca automaticamente, elenca tutte le variabili di layout del progetto, quindi entrerà in collisione? Fino ad ora non ho notato alcun problema nell'usare lo stesso ID in diversi layout, ma sono interessato a lungo termine.

+0

FYI: considerare [utilizzando Associazione dati] (https://medium.com/google-developers/no-more-findviewbyid-457457644885) – Pavel

risposta

66

Si consiglia di utilizzare ID diversi per layout diversi. A lungo termine, quando si avranno molti layout e quindi molti ID, sarà molto complicato distinguerli.

Io di solito nome i miei id in questo modo: layoutName_elementId.

Funziona per me per trovare facilmente l'ID che sto cercando, soprattutto quando si utilizza il completamento automatico (so su quale layout sto lavorando, ma in realtà non conosco l'id, in questo caso, con il mio strategia di denominazione, scrivo solo il nome del layout e porta tutti gli id ​​di quel layout).

Ulteriori informazioni su layout e ID possono essere trovati here.

codifica Felice,

+1

Qual è il problema di cercare diciamo "ok_button" in ogni attività del tuo? Il completamento automatico è ancora più chiaro in questo modo se conosci la chat che stai cercando. –

102

Risposta breve: Sì, è possibile.

Risposta lunga: è possibile farlo perché ogniqualvolta si utilizza findViewById() per ottenere un riferimento a una parte del proprio layout, il metodo ricerca solo quella vista nel layout attualmente gonfiato. Quindi, anche se hai un'altra vista con lo stesso ID in un altro layout, Android non la cercherà lì.

+11

Puoi fornire una risposta ancora più lunga? Perché R.id.layout_id è un numero intero statico ed è predeterminato al momento della compilazione, in modo che findViewById() non conosca il layout attualmente gonfiato. – Chloe

+11

Per il bene di qualcun altro che attraversa questa domanda, ho voluto rispondere alla richiesta di Chloe. L'ID sarebbe lo stesso per ogni vista, ma non apparirà mai due volte nella stessa attività. Come metafora, considera cosa succederebbe se ti dessi una pila di carte, tutte con un sacco di numeri su di loro. Molti di questi fogli di carta hanno il numero 4 scritto su di essi. Stai guardando uno dei fogli e ti chiedo di fare il giro del 4. Questo è facile. Ora guardi un altro foglio con un 4 su di esso. Puoi trovarlo e farlo circolare anche tu. Non importa che il numero sia definito in anticipo. –

+3

Non sono d'accordo con il commento di Ted, è possibile avere contemporaneamente due componenti con lo stesso ID in esecuzione sulla stessa attività. Ho appena avuto il problema su un'app, stavo usando due diversi ViewPager allo stesso tempo nell'attività principale. Quando ho provato a recuperare il ViewPager attualmente visualizzato con l'ID, in realtà ha recuperato l'altro in esecuzione in background. Ho risolto il problema semplicemente rendendo i due ID univoci. –

12

Secondo gli sviluppatori guide API:

Un ID non deve necessariamente essere unico nel suo genere in tutto l'albero, ma dovrebbe essere unico all'interno della parte dell'albero che si sta cercando (che spesso può essere l'intero albero, quindi è meglio essere completamente unico quando possibile ).

Quindi la risposta breve è che non è obbligatorio, ma è una buona pratica evitare possibili conflitti.

Problemi correlati