para - manual de programacion android pdf
Android: getString(R.string) en método estático (6)
Al programar para Android a veces hay que usar métodos estáticos. Pero cuando intenta acceder a sus recursos en un método estático con getString(R.string.text)
obtendrá un error. Hacerlo estático no funciona.
¿Alguien sabe una buena manera de evitar esto? Los archivos de recursos en Android son muy útiles para crear cosas en diferentes idiomas o realizar cambios en un texto.
Así es como accedo a los recursos desde métodos estáticos. Quizás no sea ideal, pero.
Primero, extiendo la aplicación y establezco algunos campos estáticos públicos, y creo un método para inicializarlos:
public class MyApp extends Application {
// static resources
public static String APP_NAME;
public static void initResources(Context context) {
APP_NAME = context.getResources().getString(R.string.app_name);
}
}
Y en mi manifiesto registro la Aplicación extendida:
<application
android:name=".MyApp"/>
En mi actividad de inicio (MainActivity), hago una llamada para inicializar los recursos estáticos:
@Override
protected void onCreate(Bundle savedInstanceState) {
MyApp.initResources(this);
}
Luego, en cualquier parte del proyecto, después de que se haya ejecutado MainActivity.onCreate (paquete b), puede llamar a métodos estáticos que acceden a sus recursos estáticos especificados:
public static void printAppName() {
Log.w("tag", "my app name: " + MyApp.APP_NAME);
}
De una forma u otra, necesitará un Contexto para eso ... Para los métodos estáticos, esto probablemente significa que necesita pasar un Contexto al llamarlos.
La publicación a continuación ofrece una sugerencia para crear una clase de Application
para guardar su contexto actual. Su nueva clase de Application
será accesible desde cualquier otro método estático.
¿Cómo puedo obtener un contenido de recursos de un contexto estático?
Pase una instancia de Context
(es decir, Activity
) como un objeto de parámetro a un método estático. A continuación, invoque getString
en el parámetro.
Podría usar Resources.getSystem().getStringArray(android.R.array.done);
Una forma es que puedes pasar el contexto a tu método estático. mira esto definitivamente funciona
Sonidos de clase pública {
public static MediaPlayer getSoundTouch(Context context){
return MediaPlayer.create(context, R.raw.touch);
}
public static MediaPlayer getSoundLeak(Context context){
return MediaPlayer.create(context, R.raw.leak);
}
public static MediaPlayer getSoundFinish(Context context){
return MediaPlayer.create(context, R.raw.finish);
}
}