Ответ 1
Так или иначе, для этого вам понадобится контекст... Для статических методов это, вероятно, означает, что вам нужно передать контекст при их вызове.
При программировании для Android иногда вы должны использовать статические методы. Но когда вы пытаетесь получить доступ к ресурсам в статическом методе с помощью getString(R.string.text)
, вы получите сообщение об ошибке. Сделать его статическим не работает.
Кто-нибудь знает хороший способ обойти это? Файлы ресурсов в Android очень полезны для создания вещей на разных языках или внесения изменений в текст.
Так или иначе, для этого вам понадобится контекст... Для статических методов это, вероятно, означает, что вам нужно передать контекст при их вызове.
Вы можете использовать Resources.getSystem().getStringArray(android.R.array.done);
Передайте экземпляр Context
(т.е. Activity
) в качестве объекта параметра для статического метода. Затем вызовите getString
по параметру.
Вот как я могу обращаться к ресурсам из статических методов. Может быть, не идеально, но.
Во-первых, я расширяю приложение и устанавливаю некоторые общедоступные статические поля и создаю метод для их инициализации:
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);
}
В приведенном ниже сообщении приведен пример создания класса Application
для сохранения текущего контекста. Ваш новый класс Application
будет доступен из любого другого статического метода.
Один из способов - передать контекст вашему статическому методу. убедитесь, что это определенно работает
Открытый класс Звуки {
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);
}
}