2014-10-31 21 views
5

Le risorse id possono riferirsi a un elemento più avanti nel file?Le risorse ID Android possono essere inoltrate?

Qui ho due campi, uno per il nome utente e un altro per la password. Creo una nuova risorsa ID (con la sintassi @+id/) per il campo della password, ma il campo del nome utente non può trovarlo nel campo android:nextFocusDown. Ho omesso altri campi dal layout xml, perché non sono rilevanti.

Come avrei dovuto dichiarare gli ID in questo caso?

<EditText 
    android:id="@+id/login_username" 
    android:nextFocusDown="@id/login_password" /> 

<EditText 
    android:id="@+id/login_password" 
    android:nextFocusUp="@id/login_username" 
    android:nextFocusDown="@id/login_submit" /> 

Costruire con Gradle, sto ricevendo un errore che assomiglia a questo: Error:(41, 32) No resource found that matches the given name (at 'nextFocusDown' with value '@id/login_password').

non ottengo un errore per android:nextFocusUp="@id/login_username" campo, che mi porta a credere devi dichiarare l'id prima di utilizzare esso.

Ho anche ricevuto errori di compilazione nel mio codice, perché non viene generato il file R.java, molto probabilmente perché le risorse da esso costruite non vengono create.

Con tutti i fantastici strumenti di creazione in Android, sono sorpreso che questo sia un problema. È un problema noto o un comportamento desiderato?

+2

Il compilatore di risorse non guarda avanti, semplicemente @ + id in primo luogo che utilizza tale id, anche se non è un campo "id" – zapl

risposta

4

è possibile pre-generare alcuni ids con la creazione di valori del file/ids.xml con qualcosa di simile

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

Qui è il vostro caso https://stackoverflow.com/a/12247971/4178124

+0

Sapendo che Android è open source, potrei aggiungere qualcosa come id scope del file senza di esso essere troppo di un processo burocratico? – pensono

+0

Puoi usare "hack" dal commento @zapl, funzionerà – Dmitry

6

È possibile specificare un @ + id del primo valore

<EditText 
    android:id="@+id/login_username" 
    android:nextFocusDown="@+id/login_password" /> 
<EditText 
    android:id="@+id/login_password" 
    android:nextFocusUp="@id/login_username" 
    android:nextFocusDown="@id/login_submit" /> 

Non c'è nulla di male nell'avere più ID @ + attorno. Potrebbe rendere un po 'più difficile individuare errori di battitura, ma se ne hai bisogno, funzionerà bene.

+0

Ottima risposta. Per evitare il lato negativo del potenziale errore di battitura come hai fatto notare, si potrebbe omettere "+" per il secondo id in modo che solo un "+" per ogni id. – Hong

Problemi correlati