¿Acceso estático a los recursos de una aplicación para Android?

Tengo un problema. Los recursos de una aplicación de Android:

Mi aplicación tiene misc. Modos (edit / plan / exec), que me gustaría describir usando un tipo de enumeración. Sin embargo, quisiera poblar los valores de enumeración con cadenas que provienen del archivo resource string.xml, es decir, en lugar de

enum Mode { EDIT ("edit"), PLAN ("plan"), EXEC ("exec"); String name; Mode(String name) { this.name = name; } @Override public String toString() { return this.name; } }; 

Me gustaría escribir algo como:

 enum Mode { EDIT (getResources().getText(R.string.mode_edit).toString()), PLAN (getResources().getText(R.string.mode_plan).toString())), EXEC (getResources().getText(R.string.mode_exec).toString())); String name; Mode(String name) { this.name = name; } @Override public String toString() { return this.name; } } 

Que permitiría, por ejemplo, modificar los nombres de los modos utilizando el archivo de recursos y permitir así modificaciones de nombres posteriores sin cambios de código, internacionalización, etc.

El problema es que el acceso estándar a los recursos es a través del método getResources () de una actividad que sólo está disponible en el constructor (y durante los métodos de instancia). Sin embargo, la declaración de enumeración forma parte del código de inicialización estática de una clase. ¿Hay alguna manera de acceder a los recursos de una aplicación de una manera estática?

Miguel

 enum Mode { EDIT (R.string.mode_edit), PLAN (R.string.mode_plan), EXEC (R.string.mode_exec); String id; Mode(String id) { this.id = id; } public String getName(Resources r){ return r.getText(id); } @Override public String toString() { return this.name; } } 

Alternativamente, puede hacer lo siguiente:

 public class ClassName { public static Resources res; } 

En su Application.onCreate() o Activity.onCreate() :

 ClassName.res = getResources(); 

Y en su enum Mode :

  @Override public String toString() { Resources res = ClassName.res; if (res==null){ return super.toString(); } else { return res.getText(id); } } 

Gracias, radek-k, por los ejemplos! Mientras tanto, me propuse una idea algo similar, es decir, añadí un método estático al enum al que luego pasaba el manejador de recursos durante el método onCreate () de la Actividad. Esto permite que el método toString () – acceda a las cadenas de recursos. IMHO no muy elegante, pero funciona …

Saludos, Michael

Basado en esta https://stackoverflow.com/a/3560656/262462 y porque R.string contiene números enteros

 enum Mode { EDIT (R.string.mode_edit), PLAN (R.string.mode_plan), EXEC (R.string.mode_exec); int id; Mode(int id) { this.id = id; } public String toString(Resources r) { return r.getString(id); } } 
  • Cómo agregar una segunda lista desplegable a la barra de acción en Android Honeycomb?
  • Uso del método updateAppWidgetOptions de AppWidgetManager para almacenar opciones de personalización por widget
  • ¿Cuándo es necesario usar singleTop launchMode en un widget o aplicación de Android?
  • Determinar cuándo un ViewPager cambia páginas
  • ¿Por qué findViewById (...) devuelve null?
  • Creación de un banner de aplicación inteligente para Android
  • Documentación del widget de la pantalla principal de Android
  • Transición animada entre una actividad y otra
  • ListView no se actualiza cuando llama a notifyDataSetChanged desde un BaseAdapter
  • Android: Cambiar el color del texto de la pestaña mediante programación
  • ¿Cómo puedo convertir la cadena de const valor de clase int?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.