Obtenir l'ID de ressource à partir de la valeur

J'ai beaucoup de ressources spécifiques au langage. Il y a un point dans mes applications Android où j'ai une valeur de ressource et je dois traduire cette valeur dans l'identifiant correspondant. La valeur n'est pas nécessairement dans le fichier spécifique à la langue pour la langue actuelle (en / de / …). C'est quelque part là-dedans … et c'est unique.

Après avoir lu les docs et ce thread " Comment obtenir un identifiant de ressource avec un nom de ressource connu? " Je pensais que getIdentifier(String name, String defType, String defPackage) est le bon chemin à suivre mais je ne peux pas le faire fonctionner . Le résultat est toujours "0".

  • Échantillon audio natif dans NDK problème de construction
  • Effacement et définition de l'application domestique par défaut
  • Populating Android Spinner avec la liste des objets
  • OpenFileOutput FileNotFoundException
  • Existe-t-il une méthode multiplate-forme acceptable pour afficher un clavier numérique dans des formulaires Web standard sur un périphérique tactile?
  • Existe-t-il un moyen d'avoir un champ de saisie numérique masqué?
  • Ce code fait partie d'une activité et je suis sur Android 2.2.

    Est-il possible que Android ne prenne pas en compte tous les fichiers de ressources et recherche uniquement dans le domaine spécifique de la langue actuelle?

    Pour un exemple (la langue actuelle est "de"):

     File: values-en/strings.xml <resources> <string name="txt_afirsttext">A first text</string> <string name="txt_asecondtext">A second text</string> </resources> File: values-de/strings.xml <resources> <string name="txt_afirsttext">Ein erster Text</string> <string name="txt_asecondtext">Ein zweiter Text</string> </resources> // Now I want to find the ID to this "en" text ... String testValue = "A second text"; int i = this.getResources().getIdentifier(testValue, "strings", this.getPackageName()); // ... and translate it to the actual "de" language String translatedValue = this.getResources().getString(i); 

    Pour clarifier les choses. Je ne veux pas manquer: utiliser les ressources de chaîne en tant que base de données. Ce n'est qu'une partie qui se produit dans des situations très rares.

  • Passer des chaînes entre les activités dans Android
  • IntelliJ Idea ne génère pas d'identifiant dans R.java
  • Fonctionnalités de sécurité dans Android
  • Comment ouvrir une application à partir d'un widget dans Android?
  • Android en profondeur. L'intention ne se réinitialise pas lorsque l'application est ouverte à partir de l'historique
  • L'émulateur d'Android ne démarre pas, avd
  • 2 Solutions collect form web for “Obtenir l'ID de ressource à partir de la valeur”

    Vous n'utilisez pas le identifiant getIdentifier . Vous ne spécifiez pas le texte, mais l'identifiant du texte, dans votre cas, qui serait txt_afirsttext ou txt_asecondtext .

     int i = this.getResources(). getIdentifier("txt_asecondtext", "string", this.getPackageName()); 

    Je pense qu'il n'y a aucun moyen de localiser un identifiant de ressource String par son contenu. Ce serait comme passer un flux d'octets pour localiser un dessinable.

    Votre demande a-t-elle vraiment besoin de cette façon étrange d'obtenir des ressources? Je suis certain que vous pourriez utiliser une meilleure approche pour charger dynamiquement des ressources, bien que votre premier paragraphe décrit votre scénario comme mystérieux 🙂

    Edit: Answer fixed. Merci à tdroza pour la correction.

    Une correction mineure mais importante à l'exemple de code ci-dessus: le type de ressource doit être singulier et non pluriel. C'est-à-dire «chaîne» au lieu de «chaînes» – il en va de même pour le dessin, l'id, le tableau, etc.

    Par exemple

     int i = this.getResources().getIdentifier(testValue, "string", this.getPackageName()); 
    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.