Я хочу прочитать строки из xml
файла, прежде чем я сделаю что-то еще, например, setText
с виджетами, так как я могу сделать это без объекта активности для вызова getResources()
?
168
Application
, например, подклассpublic class App extends Application {
android:name
атрибут вашего <application>
тега в, AndroidManifest.xml
чтобы он указывал на ваш новый класс, напримерandroid:name=".App"
onCreate()
методе экземпляра вашего приложения сохраните свой контекст (например, this
) в названном статическом поле mContext
и создайте статический метод, который возвращает это поле, например getContext()
:Вот как это должно выглядеть:
public class App extends Application{
private static Context mContext;
@Override
public void onCreate() {
super.onCreate();
mContext = this;
}
public static Context getContext(){
return mContext;
}
}
Теперь вы можете использовать: App.getContext()
всякий раз, когда вы хотите получить контекст, а затем getResources()
(или App.getContext().getResources()
).
Только для системных ресурсов!
использование
Вы можете использовать их везде в своем приложении, даже в объявлениях статических констант!
источник
Toast
например, поднять , получитьSharedPreference
экземпляр, открыть базу данных, как говорит мой учитель латинского языка: и так далее ).Мое решение Kotlin - использовать статический контекст приложения:
И класс Strings, который я использую везде:
Таким образом, вы можете иметь чистый способ получения строк ресурсов
Пожалуйста, не удаляйте этот ответ, позвольте мне оставить его.
источник
Strings
было полезно.Есть и другая возможность. Я загружаю шейдеры OpenGl из таких ресурсов:
Как видите, вы можете получить доступ к любому ресурсу в пути
/res/...
ИзменитьaClass
к своему классу. Это также, как я загружаю ресурсы в тестах (androidTests)источник
Синглтон:
Инициализируйте Singleton в своем
Application
подклассе:Если я не ошибаюсь, это дает вам
ApplicationContextSingleton.getInstance.getApplicationContext();
повод для приложенияContext повсюду, вызывайте его с помощью Вам не нужно очищать это в любой момент, так как когда приложение закрывается, это все равно идет с этим.Не забудьте обновить,
AndroidManifest.xml
чтобы использовать этотApplication
подкласс:Теперь вы должны иметь возможность использовать ApplicationContextSingleton.getInstance (). GetApplicationContext (). GetResources () из любого места, а также из очень немногих мест, где подклассы приложения не могут.
Пожалуйста, дайте мне знать, если вы видите что-то не так, спасибо. :)
источник
Другое решение:
Если у вас есть статический подкласс в нестатическом внешнем классе, вы можете получить доступ к ресурсам из этого подкласса через статические переменные во внешнем классе, которые вы инициализируете при создании внешнего класса. подобно
Я использовал его для функции getPageTitle (int position) статического FragmentPagerAdapter в рамках моей FragmentActivity, что полезно из-за I8N.
источник
кратчайший путь
Я использую
App.getRes()
вместоApp.getContext().getResources()
(как @Cristian ответил)Это очень просто использовать в любом месте вашего кода!
Итак, вот уникальное решение, с помощью которого вы можете получить доступ к ресурсам из любой точки мира
Util class
.(1) Создайте или отредактируйте свой
Application
класс.(2) Добавьте поле имени к вашему
manifest.xml
<application
тегу. (или пропустите это, если уже там)Теперь вы готовы идти.
Используйте в
App.getRes().getString(R.string.some_id)
любом месте кода.источник
Я думаю, возможно больше пути. Но иногда я использую это решение. (полный глобальный):
источник
Я загружаю шейдер для openGL ES из статической функции.
Помните, что вы должны использовать нижний регистр для вашего файла и имени каталога, иначе операция не будет выполнена
источник
источник
Я использую API уровень 27 и нашел лучшее решение после двух дней борьбы. Если вы хотите прочитать XML-файл из класса, который не является производным от Activity или Application, сделайте следующее.
Поместите файл testdata.xml в каталог ресурсов.
Напишите следующий код, чтобы проанализировать документ testdata.
источник
В вашем классе, где вы реализуете статическую функцию, вы можете вызывать метод private \ public из этого класса. Метод private \ public может обращаться к getResources .
например:
а из другого класса \ деятельности можно позвонить:
источник
если у вас есть контекст, я имею в виду внутри;
Вы можете использовать этот код для получения ресурсов:
источник