Je veux pouvoir itération à travers tous les champs du fichier R généré.
quelque chose comme: p> J'ai essayé de réfléchir, mais je Je n'arrive pas à charger une classe interne spécifique contenue dans la classe R. Donc, par exemple, cela ne fonctionnerait pas pour moi: p> Je peux réfléchir sur la classe R elle elle-même, mais j'ai besoin des champs dans la classe d'identification. P> J'ai également essayé de regarder à travers la classe de ressources, mais je ne pouvais y trouver rien. Dans ce cas, il semble que vous puissiez prendre un gestionnaire de ressources et obtenir le nom de la chaîne de cet identifiant, ou prendre un nom de chaîne et obtenir le fichier de ressources correspondant. Je n'ai rien trouvé comme: p> Peut-être que je vais à ce sujet. Ou peut-être que je ne devrais pas me battre tous en la main, e.g.:LayoutInflater li = MyActivity.getLayoutInflater();
ViewGroup vg = (ViewGroup) li.inflate(R.layout.main, null);
3 Réponses :
Vous pouvez utiliser la réflexion sur une classe interne, mais la syntaxe est packagename.r $ ID. Notez que la réflexion peut être très lente et vous devriez vraiment éviter d'utiliser. P>
Je pensais que la réflexion pourrait être trop chère et ne vaut pas la peine pour la commodité de ne pas avoir à maîtriser certains articles. J'espérais qu'il y avait une manière intégrée et non relacieuse d'accéder à ces identifiants, car elle ressemble à un scénario assez commun. Merci au moins, pour la syntaxe sur la réflexion sur les classes intérieures. Il est utile de savoir.
Votre réponse à mon commentaire m'a aidé à avoir une meilleure idée de ce que vous essayez de faire. P>
Vous pouvez probablement utiliser Groupe de vue # getchchildat code> et Groupe de vue # getchDildCount code> à la boucle via diverses Viewgroup code> s dans votre hiérarchie et exécutez instanceof code> Vérification de la vue code> code > s. Ensuite, vous pouvez faire ce que vous voulez en fonction du type des vues de l'enfant et de l'endroit où ils se trouvent dans votre hiérarchie. p>
Cela semble être le ticket! Heureux que la clarification ait aidé. Cela n'avait pas traversé mon esprit pour accéder à la vue des enfants de ma mise en page. Merci un tas pour la perspicacité.
un échantillon de code: Stackoverflow.com/Questtions/4184889/...
J'ai trouvé que "la classe.forname (getpackagename () +". r $ string ");" Peut vous donner accès aux ressources de chaîne et devriez fonctionner pour ID, Diable, Exc aussi.
J'utilise ensuite la classe trouvée comme ceci: p>
Je ne dis pas que cela soit snarky mais je pense que vous sentez que vous avez besoin de poser cette question signifie que vous faites probablement quelque chose de mal. Pouvez-vous élaborer sur votre cas d'utilisation pour ce faire cela. Je ne peux pas penser à aucune raison pour laquelle je voudrais avoir accès à tous les identifiants définis dans toute ma demande.
Je ne veux pas accéder à tous les identifiants, mais plutôt, tout l'ID de ressource sous un certain nom (par exemple, R.ImageViews). De cette façon, dans mon code, je peux ajouter un auditeur d'événements ou quoi que ce soit pour chacun d'entre eux dans une boucle. Mon interface utilisateur aura plusieurs visites d'images qui répondront tous aux événements, et il serait bien que je puisse accéder à toutes ces valeurs imageViews sans codage à la main chacune par nom (par exemple, iview1.setlistener (myListener); iview2.setlistener (myRistener);); En outre, je n'aurai pas à refacturer mon code si mon concepteur d'interface utilisateur décide de renommer des choses dans le fichier XML.