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

Contextobjetos en Android. Puede conducir a pérdidas de memoria. Vea mi respuesta para una solución menos arriesgada.Respuestas:
Tendrá que pasarle un
contextobjeto. O bienthissi 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
Contextcomo parámetrofuente
Contextobjetos en Android. Puede conducir a pérdidas de memoria.Contextlos 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 suministroActivityde un objeto estático que necesita ayContextdicho objeto no se destruye cuandoActivityse lleva aActivitypersistir 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
Contextobjetos. 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 elActivityoFragment, 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 pasarContextobjetos.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 contexttravés del objeto.Application, por ejemplopublic class App extends Application {. Consulte el código al lado de los pasos.android:nameatributo de su<application>etiqueta enAndroidManifest.xmlpara 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 denominadoappy 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
Contextobjetos 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