Я пытаюсь использовать метод getResources в неактивном классе. Как мне получить ссылку на объект «ресурсы», чтобы получить доступ к XML-файлу, хранящемуся в папке ресурсов?
Пример:
XmlPullParser xpp = getResources().getXml(R.xml.samplexml);
Я пытаюсь использовать метод getResources в неактивном классе. Как мне получить ссылку на объект «ресурсы», чтобы получить доступ к XML-файлу, хранящемуся в папке ресурсов?
Пример:
XmlPullParser xpp = getResources().getXml(R.xml.samplexml);
Context
объекты в Android. Это может привести к утечке памяти. См. Мой ответ, чтобы найти менее рискованное решение.Ответы:
Вам нужно будет передать ему
context
объект. Либоthis
если у вас есть ссылка на класс в действии, либоgetApplicationContext()
Затем вы можете использовать его в конструкторе (или установить для переменной экземпляра):
Если конструктор принимает
Context
в качестве параметраисточник
Context
объекты в Android. Это может привести к утечке памяти.Context
объекты неприятны, потому что не сразу очевидно, является ли это общими для приложения или для всей деятельности. Утечки памяти (и сбои) происходят, когда вы вставляете неправильный. Например, передачаActivity
статическому объекту, который нуждается,Context
и указанный объект не уничтожается, когдаActivity
это приводит кActivity
сохранению после onDestroy, поскольку он не может быть собран из-за этого другого статического объекта. Так что да, это может быть опасно, но я считаю важным упомянуть , зная, почему это опасно.Не рекомендуется передавать
Context
предметы вокруг. Это часто приводит к утечкам памяти. Я предлагаю вам не делать этого. Я создал множество приложений для Android без необходимости передавать контекст неактивным классам в приложении. Лучшей идеей было бы получить ресурсы, к которым вам нужен доступ, пока вы находитесь вActivity
илиFragment
, и удержать их в другом классе. Затем вы можете использовать этот класс в любых других классах вашего приложения для доступа к ресурсам без необходимости передаватьContext
объекты.источник
Есть еще один способ без создания объекта. Проверить ссылку . Спасибо за @cristian. Ниже я добавляю шаги, упомянутые в приведенной выше ссылке. Мне не нравится создавать для этого объект и получать доступ. Поэтому я попытался получить доступ к файлу
getResources()
без создания объекта. Я нашел этот пост. Поэтому я подумал добавить это в качестве ответа.Следуйте инструкциям, чтобы получить доступ
getResources()
в неактивном классеwithout passing a context
через объект.Application
, например, подклассpublic class App extends Application {
. См. Код рядом с шагами.android:name
атрибут вашего<application>
тега в,AndroidManifest.xml
чтобы указать на ваш новый класс, напримерandroid:name=".App"
onCreate()
методе вашего экземпляра приложения сохраните свой контекст (напримерthis
) в статическое поле с именемapp
и создайте статический метод, который возвращает это поле, напримерgetContext()
.App.getContext()
всякий раз, когда вы хотите получить контекст, а затем мы можем использоватьApp.getContext().getResources()
для получения значений из ресурсов.Вот как это должно выглядеть:
источник
вот мой ответ:
}
и звонок может быть таким:
источник
это можно сделать, используя
источник
Context
предметов - нездоровая практика,Мы можем использовать контекст. Как это, попробуйте сейчас. Где родительский элемент - это ViewGroup.
источник
ну нет необходимости передавать контекст и делать все это ... просто сделайте это
Изменить: где родительский элемент - это ViewGroup
источник
У меня это всегда работает:
Не относится к этому вопросу, но пример использования фрагмента для доступа к системным ресурсам / активности, например:
источник
В приложении-гиде базового курса ANdroid от Udacity я использовал концепцию фрагментов. Я застрял на некоторое время, испытывая трудности с доступом к некоторым строковым ресурсам, описанным в strings, xml файле. Наконец нашел решение.
Это основной вид деятельности
пакет com.example.android.tourguidekolkata;
Это не класс Activity, который расширяет FragmentPageAdapter
источник
В простом классе объявить контекст и получить данные из файла из папки res
В классе активности объявите так
источник
Я опаздываю, но полное решение; Пример класса, используйте такой контекст: -
Предупреждение (утечки памяти)
Как это решить?
Вариант 1. Вместо передачи контекста активности, то есть в одноэлементный класс, вы можете передать applicationContext ().
Вариант 2: если вам действительно нужно использовать контекст активности, то при уничтожении активности убедитесь, что для контекста, который вы передали в одноэлементный класс, установлено значение null.
Надеюсь, это поможет .. ∆∆∆∆
источник
в вашем MainActivity:
Ресурсы
тогда используйте его везде
источник