Je souhaite pouvoir parcourir tous les champs du fichier R généré.Android: Itérer par programmation dans les ID de ressources
Quelque chose comme:
for(int id : R.id.getAllFields()){
//Do something with id, like create a view for each image
}
J'ai essayé la réflexion, mais je ne peux pas sembler charger une classe interne spécifique qui est contenu dans la classe R. Ainsi, par exemple, cela ne fonctionne pas pour moi:
Class c = Class.forName("packageName.R.id")
Je peux réfléchir sur la classe R elle-même, mais je dois les champs dans la classe id.
J'ai également essayé de regarder dans la classe Ressources, mais je n'y ai rien trouvé. Dans ce cas, il semble que vous pouvez prendre un ID de ressource et obtenir le nom de chaîne de cet ID, ou prendre un nom de chaîne et obtenir l'ID de ressource correspondant. Je ne pouvais pas trouver quelque chose comme:
int[] Resources.getAllResourceIDs()
Peut-être que je vais à ce sujet faux. Ou peut-être que je ne devrais pas combattre les taper tout dans la main, .: par exemple
int[] myIds = {R.id.firstResource, R.id.secondResource}
Cette approche a l'inconvénient de ne pas être aussi flexible lorsque vous travaillez avec mon concepteur d'interface utilisateur. Chaque fois qu'il ajoute une nouvelle ressource au fichier XML, je vais devoir mettre à jour le code. Évidemment pas trop douloureux, mais ce serait quand même bien d'avoir et il semble que ce soit faisable.
EDIT:
La réponse ci-dessous à propos ViewGroup.getChildCount()/ViewGroup.getChildAt() fonctionne très bien. Mais, j'ai aussi dû trouver un moyen d'instancier mon XML ViewGroup/Layout. Pour ce faire, essayez quelque chose comme:
LayoutInflater li = MyActivity.getLayoutInflater();
ViewGroup vg = (ViewGroup) li.inflate(R.layout.main, null);
Je ne dis pas que ce soit à mon humble avis snarky mais le fait que vous sentez que vous devez poser cette question signifie que vous vous faites probablement Quelque chose ne va pas. Pouvez-vous élaborer sur votre cas d'utilisation pour ce faire. Je ne vois aucune raison pour laquelle je voudrais avoir accès à tous les identifiants définis dans toute mon application. – Qberticus
Je ne veux pas accéder à tous les ID, mais plutôt à tous les ID de ressource sous un certain nom (par exemple R.imageViewIds). De cette façon, dans mon code, je peux ajouter un écouteur d'événement ou autre à chacun d'entre eux dans une boucle for.Mon interface utilisateur aura plusieurs ImageViews qui répondront tous aux événements, et ce serait bien si je pouvais accéder à tous ces ImageViews sans coder manuellement chacun par son nom (par exemple IView1.setListener (myListener); IView2.setListener (myListener);) Aussi, alors je n'aurai pas à refactoriser mon code si mon concepteur d'interface utilisateur décide de renommer les choses dans le fichier XML. –