2011-06-04 8 views
7

Estoy tratando de acceder a variables de cadena utilizando nombres dinámicos dependiendo de en qué posición esté mi galería. Para obtener el valor de una cadena usando un nombre fijo utilizo lo siguiente, que está muy bien (la cadena se llama pic1info):¿Cómo acceder a una cadena utilizando un nombre de cadena dinámico en Android (similar a eval en javascript)?

String strTest = getResources().getString(R.string.pic1info); 

Mis cuerdas se nombran pic1info, pic2info, pic3info etc y quiero reemplazar la estática definición de pic1info para incluir la posición de modo pasar el contenido de la siguiente secuencia en el lugar de pic1info arriba de modo que devuelve una cadena diferente en función de la posición actual:

String strDynamicStringName= "pic" + position + "info"; 

en JavaScript el equivalente sería eval, i' Estoy seguro de que hay una manera simple de hacerlo, pero no sé cómo hacerlo.

¡Muchas gracias por su ayuda como siempre!

de Dave

Respuesta

2

No, no hay manera simple de hacer que en Java, pero se puede crear una matriz de enteros, donde cada índice representa el valor R de esa cadena.

private static final int[] LOOKUP_TABLE = new int[] { 
    R.string.pic1info, 
    R.string.pic2info, 
    R.string.pic3info, 
    R.string.pic4info 
}; 

Obtención de una cadena se convertiría entonces en:

String strTest = getResources().getString(LOOKUP_TABLE[position]); 
+0

Brilli y muchas gracias, eso es perfecto :) – deshg

13

uso esto: android.content.res.Resources.getIdentifier

int resID = getResources().getIdentifier("pic" + position + "info", "string", getPackageName()); 
String strTest = getResources().getString(resID); 
+2

Esta respuesta es mucho más lenta, ya que requerirá el uso de la reflexión en Java. Tenga mucho cuidado al usar este método en el código de producción. – Sam

2

Inspirado por la respuesta de Kaj, también se puede poner un String array en el archivo XML:

<resources> 
    <string-array name="picInfos"> 
     <item>value of pic1info goes here</item> 
     <item>value of pic2info goes here</item> 
     <item>value of pic3info goes here</item> 
    </string-array> 
</resources> 
Cuestiones relacionadas