Android: getString (R.string) в статическом методе - PullRequest
26 голосов
/ 29 сентября 2010

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

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

Ответы [ 6 ]

28 голосов
/ 29 сентября 2010

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

18 голосов
/ 04 февраля 2014

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

7 голосов
/ 26 января 2017

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

Сначала я расширяю Application и устанавливаю некоторые открытые статические поля и создаю метод для их инициализации:

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.(Пакет b) запущен, вы можете вызывать статические методы, которые обращаются к указанным вами статическим ресурсам:

public static void printAppName() {
  Log.w("tag", "my app name: " + MyApp.APP_NAME);
}
6 голосов
/ 29 сентября 2010

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

0 голосов
/ 30 марта 2014

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

Звуки публичного класса {

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

}

}

0 голосов
/ 07 января 2012

В приведенном ниже посте дается совет по созданию класса Application для сохранения текущего контекста.Ваш новый класс Application будет доступен из любого другого статического метода.

Как я могу получить содержимое ресурса из статического контекста?

...