2011-06-14 11 views
6

? Existe una forma sensata y limpia de referirse a los recursos de la aplicación del código de iniciación estática en mis clases de Android.¿Hay alguna manera sensata de referirse a los recursos de la aplicación (R.string ...) en los inicializadores estáticos

Me gustaría definir específicamente una enumeración que contiene los valores de algunas cadenas de recursos en sus constantes.

Aquí hay un código de pseudo para la enumeración

private enum MyEnum { 
    Const1(getString(R.string.string1)), 
    Const2(getString(R.string.string2)), 
    Const3(getString(R.string.string3)); 

    private String strVal; 

    MyEnum(String strVal){ 
     this.strVal = strVal; 
    } 
} 

Esta pregunta se aplica a cualquier tipo de inicialización estática.

+0

Estoy llegando a la idea de que la única solución elegante es simplemente para almacenar los identificadores numéricos de los recursos de cadena y tienen el cliente de la enumeración hacer la búsqueda. O tener un getter para el valor de cadena que toma un contexto y realiza la búsqueda. ¿Cualquier otra sugerencia? – fleetway76

Respuesta

11

No creo que haya una manera directa ya que se requiere contexto para cargar recursos. Sin embargo, lo que podría hacer es proporcionar un método en su enumeración para obtener la cadena requerida una vez que el contexto esté disponible. Algo así como

private enum MyEnum { 
    Const1(R.string.string1), 
    Const2(R.string.string2), 
    Const3(R.string.string3); 

    private int resId; 

    MyEnum(int resId){ 
     this.resId = resId; 
    } 

    public String resource(Context ctx) { 
     return ctx.getString(resId); 
    } 
} 

Así que acceder a ella como

String val = Const3.resource(context); 
+0

Me gusta esta respuesta mucho. – clocksmith

+0

Amplié este enfoque usando anotaciones, ahora no es necesario crear un campo 'int' y pasar' Context' http://stackoverflow.com/a/29625457/1891118 –

Cuestiones relacionadas