Réponses:
Avec quelque chose comme ça:
String mDrawableName = "myappicon";
int resID = getResources().getIdentifier(mDrawableName , "drawable", getPackageName());
getResources().getIdentifier(name, "id", getPackageName());
pour obtenir l'ID d'un ImageButton (comme vous le feriez avec R.id.name).
name
? Je veux trouver l'identifiant d'un bouton dont je connais la référence, dans mon cas c'estbutton1
getResource()
et getPackageName()
montrant une erreur. cannot resolve method
getResource()
et getPackageName()
sont des méthodes d'Activité.
Vous pouvez également essayer ceci:
try {
Class res = R.drawable.class;
Field field = res.getField("drawableName");
int drawableId = field.getInt(null);
}
catch (Exception e) {
Log.e("MyTag", "Failure to get drawable id.", e);
}
J'ai copié ces codes source à partir de l'URL ci-dessous. Sur la base des tests effectués sur cette page, il est 5 fois plus rapide que getIdentifier (). Je l'ai également trouvé plus pratique et facile à utiliser. J'espère que cela vous aidera également.
Exemple pour une ressource système publique:
// this will get id for android.R.drawable.ic_dialog_alert
int id = Resources.getSystem().getIdentifier("ic_dialog_alert", "drawable", "android");
Une autre façon consiste à consulter la documentation de la classe android.R.drawable .
Vous pouvez utiliser cette fonction pour obtenir un ID de ressource:
public static int getResourseId(Context context, String pVariableName, String pResourcename, String pPackageName) throws RuntimeException {
try {
return context.getResources().getIdentifier(pVariableName, pResourcename, pPackageName);
} catch (Exception e) {
throw new RuntimeException("Error getting Resource ID.", e)
}
}
Donc, si vous souhaitez obtenir un ID de ressource pouvant être dessiné , vous pouvez appeler la méthode comme ceci:
getResourseId(MyActivity.this, "myIcon", "drawable", getPackageName());
(ou à partir d'un fragment):
getResourseId(getActivity(), "myIcon", "drawable", getActivity().getPackageName());
Pour un ID de ressource de chaîne, vous pouvez l'appeler comme ceci:
getResourseId(getActivity(), "myAppName", "string", getActivity().getPackageName());
etc...
Attention : il lève une RuntimeException s'il ne parvient pas à trouver l'ID de ressource. Assurez-vous de récupérer correctement en production.
static
de cela, sinon getResources()
ne fonctionnera pas.
Context
n'était pas disponible. Le correctif consistait soit à le supprimer static
et à le déplacer dans un Context
(par exemple Activity
ou Application
); ou un correctif alternatif est ce que Jonathan a fait dans son édition, qui consiste à passer un Context
à la méthode.
Un autre scénario que j'ai rencontré.
String imageName = "Hello" et ensuite quand il est passé dans la fonction getIdentifier comme premier argument, il passera le nom avec la fin de la chaîne null et retournera toujours zéro. Transmettez cette imageName.substring (0, imageName.length () - 1)