2012-07-16 11 views
6

En algún lugar he leído cómo usar variables en el documento XML. Dijeron que es muy simple y creo que sí. Lo usé con éxito de esa manera en el archivo Android strings.xml. Lo estaba usando de esa manera todo el día hasta que de repente android se detuvo para analizarlo y se detuvo para tratarlo como una variable.Variables de Android en strings.xml

I utiliza de esta manera:

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

y en Java para acceder a él a través de:. GetApplicationContext() getString (R.strings.another_string);

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

En la salida he utilizado para recibir cadena como:

string1 trolololo 

y ahora recibo solamente:

{$some_string} trolololo 

¿Alguien tiene alguna idea de lo que está mal? Sé que el XML de Android puede diferir del XML estándar, pero SE UTILIZA PARA TRABAJAR. Awww ... Gracias por cualquier consejo.

+0

intente después de limpiar su proyecto, y 'ejecutar' de nuevo. –

+0

Hm ... Me pregunto, si esto funciona también con otros tipos como int o int [] – Fraggles

Respuesta

7

Esto va a resolver su problema:

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

Ahora la salida del getApplicationContext().getString(R.strings.another_string) habrá string1 trolololo.

+0

Lo interesante es que cuando pruebo esto, me sale un error, 'No se encontró ningún recurso que coincida con el nombre de pila (en 'another_string' con el valor '@ string/some_string trolololo'). ' –

+0

[DevGuide] (http://developer.android.com/guide/topics/resources/string-resource.html # String) dice que en las referencias de recursos XML '@ string/string_name' –

+1

Sí, es el archivo XML que está arrojando el error. No pude editar eso en el comentario a tiempo antes de que se bloqueara. –

0

No estoy seguro de cómo lo primero que ha hecho inicial estaba trabajando con las llaves, pero me he encontrado este problema antes y no pudo encontrar una solución ..

Ahora lo que hago llama a esas cadenas por separado y las concatena durante el tiempo de ejecución.

+0

usando los paréntesis que podría hacer referencia a algún valor de cadena dentro este documento local, y obviamente eso me permitió concatenarlos. – Garet

18

Suponiendo que desea pasar un valor de cadena como un parámetro en el another_string, entonces su cadena no está formateada correctamente para recibir ese argumento y si intenta utilizarlo su salida será {$some_string} trolololo.

Si es necesario formatear sus cadenas usando String.Format (String, Object ...), a continuación, puede hacerlo poniendo sus argumentos de formato en el recurso cadena.

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

Ahora su poder para dar formato a la cadena con argumentos de su aplicación como esta:

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

Si lo hace, la cadena de salida será another_string = It works! trolololo.

Eche un vistazo a la documentación oficial de Android Developers, here.

+0

Gracias por la respuesta. Ya he visto este método para formatear la cadena (Anteriormente estaba buscando una solución en el enlace de documentación de Android Dev que publicó). Y, sí, eso resolvería mi problema, pero quería poner todas estas cadenas en el archivo strings.xml, prepararlas (concatenarlas) allí y usarlas durante las cadenas preinstaladas en tiempo de ejecución. Lo único que no puedo entender es ¿POR QUÉ estaba funcionando, y ahora no? – Garet

Cuestiones relacionadas