Quiero leer cadenas de un xml
archivo antes de hacer cualquier otra cosa como setText
en widgets, entonces, ¿cómo puedo hacer eso sin un objeto de actividad al que invocar getResources()
?
168
Application
, por ejemplopublic class App extends Application {
android:name
atributo de su <application>
etiqueta en AndroidManifest.xml
para apuntar a su nueva clase, por ejemploandroid:name=".App"
onCreate()
método de la instancia de su aplicación, guarde su contexto (por ejemplo this
) en un campo estático llamado mContext
y cree un método estático que devuelva este campo, por ejemplo getContext()
:Así es como debería verse:
public class App extends Application{
private static Context mContext;
@Override
public void onCreate() {
super.onCreate();
mContext = this;
}
public static Context getContext(){
return mContext;
}
}
Ahora puede usar: App.getContext()
cuando quiera obtener un contexto, y luego getResources()
(o App.getContext().getResources()
).
¡Solo para recursos del sistema!
Utilizar
¡Puede usarlos en cualquier lugar de su aplicación, incluso en declaraciones de constantes estáticas!
fuente
Toast
por ejemplo, obtener unaSharedPreference
instancia, abrir una base de datos, como dice mi profesor de lengua latina: etcétera ).Mi solución de Kotlin es usar un contexto de aplicación estático:
Y la clase Strings, que uso en todas partes:
Para que pueda tener una forma limpia de obtener cadenas de recursos
Por favor, no elimine esta respuesta, déjame guardar una.
fuente
Strings
fue útil.También hay otra posibilidad. Cargo sombreadores OpenGl de recursos como este:
Como puede ver, puede acceder a cualquier recurso en la ruta
/res/...
CambiaraClass
a su clase. Así también cómo cargo recursos en pruebas (androidTests)fuente
El singleton:
Inicialice el Singleton en su
Application
subclase:Si no me equivoco, esto le da un enlace al applicationContext en todas partes, llámelo
ApplicationContextSingleton.getInstance.getApplicationContext();
llámelo No debería tener que borrar esto en ningún momento, ya que cuando la aplicación se cierra, esto va de todos modos.Recuerde actualizar
AndroidManifest.xml
para usar estaApplication
subclase:Ahora debería poder usar ApplicationContextSingleton.getInstance (). GetApplicationContext (). GetResources () desde cualquier lugar, también los pocos lugares donde las subclases de aplicaciones no pueden.
Avísame si ves algo mal aquí, gracias. :)
fuente
Otra solución:
Si tiene una subclase estática en una clase externa no estática, puede acceder a los recursos desde dentro de la subclase a través de variables estáticas en la clase externa, que inicializa en la creación de la clase externa. Me gusta
Lo utilicé para la función getPageTitle (int position) del FragmentPagerAdapter estático dentro de mi FragmentActivity que es útil debido a I8N.
fuente
Atajo
Yo uso en
App.getRes()
lugar deApp.getContext().getResources()
(como @Cristian respondió)¡Es muy fácil de usar en cualquier parte de su código!
Así que aquí hay una solución única mediante la cual puede acceder a los recursos desde cualquier lugar
Util class
.(1) Crea o edita tu
Application
clase.(2) Agregue el campo de nombre a su
manifest.xml
<application
etiqueta. (o Omita esto si ya está allí)Ahora estás listo para irte.
Usar
App.getRes().getString(R.string.some_id)
en cualquier parte del código.fuente
Creo que es posible más. Pero a veces, uso esta solución. (global completo):
fuente
Cargo shader para openGL ES desde la función estática.
Recuerde que debe usar minúsculas para su archivo y nombre de directorio, de lo contrario, la operación fallará
fuente
fuente
Estoy usando API nivel 27 y encontré la mejor solución después de luchar durante unos dos días. Si desea leer un archivo xml de una clase que no se deriva de Actividad o Aplicación, haga lo siguiente.
Coloque el archivo testdata.xml dentro del directorio de activos.
Escriba el siguiente código para analizar el documento testdata.
fuente
En su clase, donde implementa la función estática , puede llamar a un método privado \ público desde esta clase. El método privado \ público puede acceder a getResources .
por ejemplo:
y desde otra clase \ actividad, puedes llamar a:
fuente
si tienes un contexto, quiero decir adentro;
puedes usar este código para obtener recursos:
fuente