Estoy tratando de usar el método getResources en una clase sin actividad. ¿Cómo obtengo la referencia al objeto "recursos" para poder acceder al archivo xml almacenado en la carpeta de recursos?
Ejemplo:
XmlPullParser xpp = getResources().getXml(R.xml.samplexml);
Context
objetos en Android. Puede conducir a pérdidas de memoria. Vea mi respuesta para una solución menos arriesgada.Respuestas:
Tendrá que pasarle un
context
objeto. O bienthis
si tiene una referencia a la clase en un activty, ogetApplicationContext()
Luego puede usarlo en el constructor (o establecerlo en una variable de instancia):
Donde el constructor acepta
Context
como parámetrofuente
Context
objetos en Android. Puede conducir a pérdidas de memoria.Context
los objetos son desagradables porque no es obvio de inmediato si abarca toda la aplicación o la actividad. Se producen pérdidas de memoria (y bloqueos) cuando se suministra el incorrecto. Por ejemplo, el suministroActivity
de un objeto estático que necesita ayContext
dicho objeto no se destruye cuandoActivity
se lleva aActivity
persistir después de onDestroy, ya que no se puede GC debido a este otro objeto estático. Entonces, sí, puede ser peligroso, pero saber por qué es peligroso, creo que es importante mencionarlo aquí.No es una buena idea pasar
Context
objetos. Esto a menudo conducirá a pérdidas de memoria. Mi sugerencia es que no lo hagas. He creado numerosas aplicaciones de Android sin tener que pasar el contexto a las clases sin actividad en la aplicación. Una mejor idea sería obtener los recursos a los que necesita acceder mientras está en elActivity
oFragment
, y conservarlo en otra clase. Luego puede usar esa clase en cualquier otra clase en su aplicación para acceder a los recursos, sin tener que pasarContext
objetos.fuente
Hay una forma más sin crear un objeto también. Verifique la referencia . Gracias por @cristian. A continuación agrego los pasos que se mencionan en la referencia anterior. Para mí no me gusta crear un objeto para eso y acceder. Así que intenté acceder al
getResources()
sin crear un objeto. Encontré esta publicación. Entonces pensé agregarlo como respuesta.Siga los pasos para acceder
getResources()
en una clase sin actividad awithout passing a context
través del objeto.Application
, por ejemplopublic class App extends Application {
. Consulte el código al lado de los pasos.android:name
atributo de su<application>
etiqueta enAndroidManifest.xml
para apuntar a su nueva clase, por ejemploandroid:name=".App"
onCreate()
método de la instancia de su aplicación, guarde su contexto (pthis
. Ej. ) En un campo estático denominadoapp
y cree un método estático que devuelva este campo, pgetContext()
. Ej .App.getContext()
cuando quiera obtener un contexto, y luego podemos usarApp.getContext().getResources()
para obtener valores de los recursos.Así es como debería verse:
fuente
Aquí está mi respuesta:
}
y la llamada puede ser así:
fuente
esto se puede hacer usando
fuente
Context
objetos no es una práctica saludablePodemos usar el contexto como este intente ahora Donde el padre es el ViewGroup.
fuente
bueno, no hay necesidad de pasar el contexto y hacer todo eso ... simplemente haz esto
Editar: donde padre es el ViewGroup
fuente
Esto siempre funciona para mí:
No relacionado con esta pregunta, pero ejemplo usando un Fragmento para acceder a los recursos / actividades del sistema como este:
fuente
En la aplicación de guía turística del curso básico ANdroid de Udacity, he usado el concepto de Fragmentos. Me quedé atrapado por un tiempo experimentando dificultades para acceder a algunos recursos de cadena descritos en cadenas, archivo xml. Finalmente obtuve una solución.
Esta es la clase de actividad principal.
paquete com.example.android.tourguidekolkata;
Esta es la clase no Activity que extiende FragmentPageAdapter
fuente
En clase simple, declare el contexto y obtenga datos del archivo de la carpeta res
En la clase de actividad declara así
fuente
Llego tarde pero la solución completa: Clase de ejemplo, contexto de uso como este: -
Advertencia (Fugas de memoria)
¿Cómo resolver esto?
Opción 1 : en lugar de pasar el contexto de actividad, es decir, esto a la clase singleton, puede pasar applicationContext ().
Opción 2: si realmente tiene que usar el contexto de actividad, cuando la actividad se destruya, asegúrese de que el contexto que pasó a la clase singleton esté establecido en nulo.
Espero que ayude ...
fuente
en su actividad principal:
Recursos Ayudante:
luego úsalo en todas partes
fuente