199 votes

Comment obtenir le nom de la ressource à partir de l'identifiant de la ressource

Dans ma mise en page, j'ai défini quelque chose comme ceci .

<RadioButton
    android:id="@+id/radio1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Dnt want this text" />

Supposons qu'une fonction de l'activité me renvoie cet id (id du radioButton). Maintenant, je veux obtenir ce texte radio1 à partir de cet identifiant. En bref, je veux récupérer le texte radio1 écrit en android:id="@+id/radio1"

Quelqu'un peut-il me dire comment c'est possible ?

0 votes

C'est une longue histoire J'ai besoin de remplir des données dans un grand nombre de textes d'édition à partir de données reçues du serveur. Ainsi, au lieu de définir manuellement les données dans toutes les zones de texte, je suis en train d'écrire une méthode qui pourrait faire ce travail pour moi.

441voto

Shubhayu Points 5072

Dans votre activité, essayez ceci :

  1. pour obtenir une chaîne comme radio1 :

    getResources().getResourceEntryName(int resid);
  2. pour obtenir une chaîne comme com.sample.app:id/radio1 :

    getResources().getResourceName(int resid);

Dans Kotlin Now :

val name = v.context.resources.getResourceEntryName(v.id)

5 votes

Merci d'avoir répondu à cette question, j'ai passé la majeure partie d'une heure à chercher ce problème sur Google - le site de développement ne cessait de me renvoyer vers getString() - qui était inutilisable pour ce problème.

8 votes

Vous savez quelle est la différence entre getResourceEntryName(int resid) et getResourceName(int resid) ?

10 votes

@JoshPinter la référence dit : getResourceEntryName : Renvoie le nom de l'entrée pour un identifiant de ressource donné getResourceName : Renvoie le nom complet pour un identifiant de ressource donné. Ce nom est une chaîne unique de la forme "package:type/entry". La différence semble alors se situer au niveau de l'ajout de l'option paquet:type para getResourceName

12voto

PREM Points 1253

Vous avez id( type 'long') à partir de cet identifiant, vous voulez accéder au bouton radio id(nom) c'est-à-dire radio1 . Vous utilisez ce

getResources().getResourceEntryName(id);

en utilisant ci-dessus, vous pouvez obtenir le nom du bouton radio, c'est-à-dire radio1. ici le paramètre id est celui que vous avez (type long) . Essayez ceci, cela vous aidera à 100%.

3 votes

Merci. Je suis content que quelqu'un ait répondu à ma question au lieu des habituelles réponses du type "pourquoi as-tu besoin de ça [noob]". Avoir le nom de l'élément pendant que j'itère à travers eux est INVALABLE pour le débogage. Je veux dire, vraiment, comment vais-je trouver le TextView avec l'id 354814715 ? (qui, si je ne me trompe pas, n'est même pas constant entre les compilations) - je ne sais pas pourquoi le PO en avait besoin, mais j'en avais besoin pour vérifier que ma fonction de mise à l'échelle de la police itérait bien tous les sous-éléments.

5voto

Anand Makwana Points 31

Kotlin :

val name = v.context.resources.getResourceEntryName(v.id)

1voto

Si j'ai bien compris, ce que vous vouliez récupérer est le mot "radio1" (à partir de l'identifiant lui-même ?). Si c'est le cas, vous devez d'abord obtenir son identifiant.

int intname= buttonname.getId();

puis obtenir le résultat de celui-ci

String stringname= getResources().getResourceEntryName(intname);

J'espère avoir aidé

-2voto

Dimitris Makris Points 3835

Vous voulez dire que vous voulez prendre la chaîne de texte de l'id ?

Puisque vous l'avez défini, vous devriez savoir ce que c'est.

Si vous avez une mise en page et que vous voulez savoir si une vue a un identifiant spécifique, vous pouvez parcourir toute la mise en page et vérifier avec getId(), si l'identifiant de chaque vue est celui que vous recherchez

J'espère que cela vous aidera (si j'ai bien compris votre question :) ).

0 votes

Non, tu as tout faux. Je veux récupérer le texte radio1 de Android:id="@+id/radio1"

0 votes

Le texte radio1 EST l'id de votre vue. Il ne s'agit pas d'un simple texte que vous pouvez obtenir, diviser, etc. Afin de mieux vous aider, pouvez-vous nous dire à quoi exactement vous sert ce texte ?

0 votes

@DimitrisMakris :C'est une longue histoire J'ai besoin de remplir des données dans un grand nombre d'editText à partir de certaines données reçues du serveur. Donc, au lieu de définir manuellement les données dans toutes les zones de texte, j'écris une méthode qui pourrait faire ce travail pour moi pour cela j'ai besoin de ceci

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X