studio programacion para móviles libro edición desarrollo desarrollar curso aprende aplicaciones android static getstring

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.



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); }

}