Je veux lire les chaînes d'un xml
fichier avant de faire quoi que ce soit d'autre, comme setText
sur les widgets, alors comment puis-je faire cela sans objet d'activité à appeler getResources()
?
168
Application
, par exemplepublic class App extends Application {
android:name
attribut de votre <application>
balise dans AndroidManifest.xml
pour pointer vers votre nouvelle classe, par exempleandroid:name=".App"
onCreate()
méthode de votre instance d'application, enregistrez votre contexte (par exemple this
) dans un champ statique nommé mContext
et créez une méthode statique qui renvoie ce champ, par exemple getContext()
:Voici à quoi cela devrait ressembler:
public class App extends Application{
private static Context mContext;
@Override
public void onCreate() {
super.onCreate();
mContext = this;
}
public static Context getContext(){
return mContext;
}
}
Vous pouvez désormais utiliser: à App.getContext()
chaque fois que vous souhaitez obtenir un contexte, puis getResources()
(ou App.getContext().getResources()
).
Pour les ressources système uniquement!
Utilisation
Vous pouvez les utiliser partout dans votre application, même dans les déclarations de constantes statiques!
la source
Toast
par exemple, lever uneSharedPreference
instance, ouvrir une base de données, comme le dit mon professeur de langue latine: et cetera ).Ma solution Kotlin consiste à utiliser un contexte d'application statique:
Et la classe Strings, que j'utilise partout:
Ainsi, vous pouvez avoir un moyen propre d'obtenir des chaînes de ressources
Veuillez ne pas supprimer cette réponse, laissez-moi en garder une.
la source
Strings
été utile.Il y a aussi une autre possibilité. Je charge des shaders OpenGl à partir de ressources comme celle-ci:
Comme vous pouvez le voir, vous pouvez accéder à n'importe quelle ressource dans le chemin
/res/...
ChangeaClass
vers votre classe. C'est aussi comment je charge des ressources dans les tests (androidTests)la source
Le Singleton:
Initialisez le Singleton dans votre
Application
sous-classe:Si je ne me trompe pas, cela vous donne un accès à applicationContext partout, appelez-le avec
ApplicationContextSingleton.getInstance.getApplicationContext();
Vous ne devriez pas avoir besoin de l'effacer à aucun moment, car lorsque l'application se ferme, cela va avec de toute façon.N'oubliez pas de mettre à jour
AndroidManifest.xml
pour utiliser cetteApplication
sous - classe:Vous devriez maintenant pouvoir utiliser ApplicationContextSingleton.getInstance (). GetApplicationContext (). GetResources () de n'importe où, ainsi que les très rares endroits où les sous-classes d'application ne peuvent pas.
S'il vous plaît laissez-moi savoir si vous voyez quelque chose de mal ici, merci. :)
la source
Une autre solution:
Si vous avez une sous-classe statique dans une classe externe non statique, vous pouvez accéder aux ressources depuis la sous-classe via des variables statiques dans la classe externe, que vous initialisez lors de la création de la classe externe. Comme
Je l'ai utilisé pour la fonction getPageTitle (position int) du FragmentPagerAdapter statique dans mon FragmentActivity, ce qui est utile en raison de I8N.
la source
Raccourci
J'utilise à la
App.getRes()
place deApp.getContext().getResources()
(comme @Cristian a répondu)Il est très simple à utiliser n'importe où dans votre code!
Voici donc une solution unique par laquelle vous pouvez accéder aux ressources de n'importe où
Util class
.(1) Créez ou modifiez votre
Application
classe.(2) Ajoutez un champ de nom à votre
manifest.xml
<application
balise. (ou sauter ceci si déjà là)Maintenant, vous êtes prêt à partir.
Utilisez
App.getRes().getString(R.string.some_id)
n'importe où dans le code.la source
Je pense que plus de chemin est possible. Mais parfois, j'utilise cette solution. (global complet):
la source
Je charge le shader pour openGL ES à partir de la fonction statique.
N'oubliez pas que vous devez utiliser des minuscules pour le nom de votre fichier et de votre répertoire, sinon l'opération échouera
la source
la source
J'utilise le niveau d'API 27 et j'ai trouvé la meilleure solution après avoir lutté pendant environ deux jours. Si vous souhaitez lire un fichier xml d'une classe qui ne dérive pas d'Activité ou d'Application, procédez comme suit.
Placez le fichier testdata.xml dans le répertoire des ressources.
Écrivez le code suivant pour analyser le document testdata.
la source
Dans votre classe, où vous implémentez la fonction statique , vous pouvez appeler une méthode private \ public à partir de cette classe. La méthode private \ public peut accéder à getResources .
par exemple:
et depuis une autre classe \ activité, vous pouvez appeler:
la source
si vous avez un contexte, je veux dire à l'intérieur;
vous pouvez utiliser ce code pour obtenir des ressources:
la source