(Android Xamarin) récupère la valeur de la chaîne de Ressource au lieu de int

Je commence tout juste à créer une application android simple avec L'utilisation de Xamarin en utilisant VS2012. Je sais qu'il existe un type de Ressource juste pour les chaînes. Dans mon dossier de ressources, j'ai un fichier xml comme ceci:

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

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

25
demandé sur Roj Beraña 2013-04-09 12:33:26

4 réponses

Essayez-le comme en utilisant des ressources .GetString pour obtenir une chaîne à partir des ressources de chaîne

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);
34
répondu ρяσѕρєя K 2013-04-09 08:56:30

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

using Android.App;

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

GetString(), utilisé de cette façon, est une méthode définie sur l'abstrait Context classe. 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é de cette façon, est une propriété en lecture seule sur l' ContextWrapper classe, qui Activity hérite de la ContextThemeWrapper classe.

13
répondu Tieson T. 2014-05-29 03:05:23

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

int resID = context.Resources.GetIdentifier(listEntryContact.DetailImage.ImageName, "drawable", context.PackageName);
imageView.SetImageResource(resID);
3
répondu da Rocha Pires 2014-10-08 11:09:03
int int_recordTable = Resource.String.RecordsTable;

String recordTable = (String.valueOf(int_recordTable)); //no more errors

Obtenez le int, puis changez-le en String

-5
répondu Bigflow 2013-04-09 08:37:38