Подтвердить что ты не робот

Android: getString (R.string) в статическом методе

При программировании для Android иногда вы должны использовать статические методы. Но когда вы пытаетесь получить доступ к ресурсам в статическом методе с помощью getString(R.string.text), вы получите сообщение об ошибке. Сделать его статическим не работает.

Кто-нибудь знает хороший способ обойти это? Файлы ресурсов в Android очень полезны для создания вещей на разных языках или внесения изменений в текст.

4b9b3361

Ответ 1

Так или иначе, для этого вам понадобится контекст... Для статических методов это, вероятно, означает, что вам нужно передать контекст при их вызове.

Ответ 2

Вы можете использовать Resources.getSystem().getStringArray(android.R.array.done);

Ответ 3

Передайте экземпляр Context (т.е. Activity) в качестве объекта параметра для статического метода. Затем вызовите getString по параметру.

Ответ 4

Вот как я могу обращаться к ресурсам из статических методов. Может быть, не идеально, но.

Во-первых, я расширяю приложение и устанавливаю некоторые общедоступные статические поля и создаю метод для их инициализации:

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

И в моем манифесте я регистрирую расширенное приложение:

<application 
  android:name=".MyApp"/>

В моей стартовой активности (MainActivity) я делаю вызов инициализации статических ресурсов:

@Override
protected void onCreate(Bundle savedInstanceState) {
  MyApp.initResources(this);   
}

Затем в любом месте вашего проекта после запуска MainActivity.onCreate(Bundle b) вы можете вызвать статические методы, которые будут обращаться к вашим указанным статическим ресурсам:

public static void printAppName() {
  Log.w("tag", "my app name: " + MyApp.APP_NAME);
}

Ответ 6

Один из способов - передать контекст вашему статическому методу. убедитесь, что это определенно работает

Открытый класс Звуки {

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

}

}