2012-07-16 2 views
6

Da qualche parte ho letto come utilizzare le variabili nel documento XML. Hanno detto che è molto semplice e immagino lo sia stato. L'ho usato con successo in questo modo nel file strings.xml di Android. Lo stavo usando in quel modo tutto il giorno fino a quando, improvvisamente, Android si fermò per analizzarlo e si fermò per trattarlo come una variabile.Variabili Android in stringhe.xml

ho utilizzato in questo modo:

<resources> 
<string name="some_string">string1</string> 
<string name="another_string"> {$some_string} trolololo </string> 
</resources> 

in java accedendo attraverso:. GetApplicationContext() getString (R.strings.another_string);

getApplicationContext().getString(R.strings.another_string); 

In uscita ho usato per ricevere stringa del tipo:

string1 trolololo 

e ora ricevo solo:

{$some_string} trolololo 

Qualcuno ha qualche idea di ciò che è sbagliato? So che l'XML di Android può differire dall'XML standard, ma è UTILIZZATO PER LAVORARE. Awww ... Grazie per qualsiasi consiglio.

+0

prova dopo aver pulito il tuo progetto, e "esegui" di nuovo. –

+0

Hm ... Mi chiedo, se questo funziona anche con altri tipi come int o int [] – Fraggles

risposta

7

questo risolverà il vostro problema:

<resources> 
    <string name="some_string">string1</string> 
    <string name="another_string">@string/some_string trolololo</string> 
</resources> 

Ora l'uscita del getApplicationContext().getString(R.strings.another_string) sarà string1 trolololo.

+0

La cosa interessante è quando provo questo, ottengo un errore, 'Nessuna risorsa trovata che corrisponde al nome dato (a 'another_string' con valore '@ string/some_string trolololo'). ' –

+0

[DevGuide] (http://developer.android.com/guide/topics/resources/string-resource.html # String) dice che nei riferimenti alle risorse XML '@ string/string_name' –

+1

Sì, è il file XML che genera l'errore. Non sono riuscito a modificarlo nel commento in tempo prima che fosse bloccato. –

0

io non sono sicuro di come la prima cosa che hai fatto prima stava lavorando con le parentesi graffe, ma ho incontrato questo problema prima e non poteva trovare una soluzione ..

Ora quello che faccio chiama queste stringhe separatamente e le concatena durante il runtime.

+0

utilizzando le parentesi graffe che potrei fare riferimento a qualche valore di stringa all'interno questo documento locale, e ovviamente questo mi ha permesso di concatenarli. – Garet

18

Supponendo che si desideri passare un valore di stringa come parametro nello another_string, la stringa non è formattata correttamente per ricevere quell'argomento e se si tenta di utilizzarlo l'output sarà {$some_string} trolololo.

Se è necessario formattare le stringhe utilizzando String.Format (String, Object ...), allora si può fare in modo da mettere le argomentazioni formato nella risorsa stringa.

<resources> 
<string name="some_string">string1</string> 
<string name="another_string">%1$s trolololo</string> 
</resources> 

Ora il vostro grado di formattare la stringa con argomenti dalla vostra applicazione in questo modo:

String arg = "It works!"; 
String testString = String.format(getResources().getString(R.string.another_string), arg); 
Log.i("ARG", "another_string = " + testString); 

facendo in modo che la stringa di output sarà another_string = It works! trolololo.

Dai un'occhiata alla documentazione ufficiale di Android Developers, here.

+0

Grazie per la risposta. Ho già visto questo metodo per formattare una stringa (prima stavo cercando una soluzione sul collegamento alla documentazione di Android Dev che hai postato). E - Sì - Questo avrebbe risolto il mio problema ma volevo mettere tutte queste stringhe nel file strings.xml, prepararle (concatenarle) e usarle durante le stringhe pre-preparate in fase di esecuzione. L'unica cosa che non riesco a capire è perché funzionava, e ora non lo è? – Garet