web-dev-qa-db-fra.com

(Android Xamarin) Récupère la valeur de la chaîne de ressource au lieu de l'int

Je commence juste à créer une simple application Android avec l'utilisation de Xamarin à l'aide de VS2012. Je sais qu'il existe un type de ressource uniquement pour les chaînes. Dans mon dossier de ressources, j'ai un fichier xml comme celui-ci :

<?xml version="1.0" encoding="utf-8"?>
<resources>
   <string name="RecordsTable">records</string>
   <string name="ProjectTable">projects</string>
   <string name="ActivitiesTable">activities</string>
</resources>

Dans mon code, je veux utiliser les valeurs de ces ressources comme:

string recordTable = Resource.String.RecordsTable; //error, data type incompatibility

Je le sais Resource.String.<key> renvoie un entier donc je ne peux pas utiliser le code ci-dessus. J'espère que la variable recordTable aura une valeur de records.

Existe-t-il un moyen d'utiliser la valeur de cette chaîne de ressource pour les variables de chaîne de mon code?

26
raberana

essayez-le en utilisant Resources.GetString pour obtenir la chaîne à partir de la chaîne Ressources

Context context = this;
// Get the Resources object from our context
Android.Content.Res.Resources res = context.Resources;
// Get the string resource, like above.
string recordTable = res.GetString(Resource.String.RecordsTable);
35
ρяσѕρєя K

Il convient de noter que vous avez pas besoin de créer une instance de Resources pour accéder à la table des ressources. Cela fonctionne aussi bien:

using Android.App;

public class MainActivity : Activity
{
    void SomeMethod()
    {
        string str = GetString(Resource.String.your_resource_id);
    }
}

GetString(), utilisée de cette façon, est une méthode définie sur la classe abstraite Context. Vous pouvez également utiliser cette version:

using Android.App;

public class MainActivity : Activity
{
    void SomeMethod()
    {
        string str = Resources.GetString(Resource.String.your_resource_id);
    }
}

Resources, utilisée de cette façon, est une propriété en lecture seule de la classe ContextWrapper, que Activity hérite de la classe ContextThemeWrapper.

13
Tieson T.

Si vous n'êtes pas dans une activité ou un autre contexte, vous devez obtenir le contexte et l'utiliser pour obtenir les ressources et PackageName, comme l'exemple suivant:

int resID = context.Resources.GetIdentifier(listEntryContact.DetailImage.ImageName, "drawable", context.PackageName);
imageView.SetImageResource(resID);
3
da Rocha Pires