2011-10-01 13 views
34

Solo una breve domanda, qual è l'ids.xml utilizzato per lo sviluppo di un'app per Android? Ho visto un esempio sulla pagina web risorse Android che conteneva:per cosa viene usato ids.xml?

<resources> 
    <item name="snack" type="id"/> 
</resources> 

Cosa sarebbe questo essere utilizzato per?

risposta

17

id.xml viene generalmente utilizzato per dichiarare gli id ​​che si utilizzano per le viste nei layout.

si potrebbe usare qualcosa come

<TextView android:id="@id/snack"> 

per la vostra data XML.

+11

Qualsiasi vantaggio nel definirlo in "ids.xml" al contrario di fare semplicemente ... android: id = "@ + id/snack"? – pyko

+5

Quindi, dovrei usare android: id = "@ + id/newID" o dichiarare newID sul file ids.xml? Qual è la soluzione migliore? –

+3

potresti usarlo anche per i tag 'view.setTag (id, value)' per leggere quel tag dalla tua vista più tardi ... – SparK

22

ids.xml ha il seguente vantaggio: tutti gli ID sono stati dichiarati, quindi il compilatore può riconoscerli. Se qualcosa di simile:

<TextView 
    android:id="@+id/text1" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_alignBelow="@id/text2" 
    android:text="...."/> 
<TextView 
    android:id="@+id/text2" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="...."/> 

può causare errore di compilazione perché text2 stato denominati nel prima dichiarato

+0

Hai ragione, sto avendo questo problema esatto. So che è un vecchio post.Nella mia situazione, devo mettere il pulsante salva nella parte superiore del file XML ma apparirà nel pulsante nella schermata Voglio che l'altra vista indichi SOPRA saveButton. Ho provato a lasciare che il pulsante salva dicesse SOTTO quella vista ma non ha funzionato per me. – malhobayyeb

+1

Sebbene sia vero, in realtà non aiuta molto. In questo esempio, potresti aver inserito 'android: layout_alignBelow =" @ + id/text2 "' e nel secondo 'TextView',' android: id = "@ id/text2" '. – ataulm

+1

Questa è una soluzione alternativa valida, ma dichiarare un ID in una vista diversa da quella specificata potrebbe non essere la scelta stilistica migliore. Affinchè la lingua rispecchi correttamente il tuo intento, l'id dovrebbe essere dichiarato all'interno della vista che lo utilizza. –

8

Un'altra applicazione per id.xml è rispetto al layout e progetti di libreria. Diciamo si specifica un elenco generico di opzioni in una libreria (finestra) Layout

<CheckedTextView android:id="@+id/checked_option_one"... 
<CheckedTextView android:id="@+id/checked_option_two"... 
... 

e gestire questi punti di vista in un generico (finestra) frammento

optionOneCheck = (CheckedTextView)rootView.findViewById(R.id.checked_option_one); 
optionTwoCheck = (CheckedTextView)rootView.findViewById(R.id.checked_option_two); 

Se si rimuove qualsiasi delle dichiarazioni vista da una copia del layout in un progetto principale, si otterrà un'eccezione di errore "no tale campo" in fase di esecuzione.

Il compilatore non si lamenta, ma in fase di esecuzione l'ID non è effettivamente lì/conosciuto.

Dichiarare gli ID di id.xml e utilizzando

<CheckedTextView android:id="@id/checked_option_one"... 
... 

evita l'errore di runtime

+1

"Il compilatore non si lamenta" - sei sicuro? Per lo meno, Lint si lamenta se viene utilizzato un ID che non esiste nel progetto. Indipendentemente da ciò, evitare che l'errore di runtime (con il metodo che hai descritto) possa mascherare il sintomo, ma non il problema; stai cercando di ottenere una vista basata su un ID non collegato a una vista. – ataulm

+0

La mia risposta si riferisce a una situazione in cui un'applicazione di base si trova in un progetto di libreria e le versioni di marca utilizzano layout modificati con alcune delle viste nel layout omesse da una definizione di layout sostituita nell'app (principale) di marca. Poiché la definizione completa del layout è ancora nel progetto della libreria, il compilatore trova l'id, ma in fase di esecuzione non è lì. – mir

+0

AH ok, ho capito, grazie per l'aggiornamento. – ataulm

7

Durante la creazione di vista dinamico, predefinire id in ids.xml dà la possibilita 'di fare riferimento a una nuova visualizzazione creata . Dopo aver utilizzato il metodo setId(id), è possibile accedere alla vista come se fosse stata definita in XML. Questo blog post ha un bell'esempio.

Problemi correlati