2013-04-09 3 views
24

Im appena iniziando a creare una semplice app Android con l'uso di Xamarin utilizzando VS2012. So che esiste un tipo di risorsa solo per le stringhe. Nella mia cartella delle risorse, ho un file XML in questo modo:(Android Xamarin) Ottieni il valore di stringa risorsa invece di int

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

Nel mio codice, io voglio usare i valori di tali risorse come:

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

So che Resource.String.<key> restituisce un intero quindi non posso usare il codice sopra. Spero che la variabile recordTable abbia un valore di records.

C'è un modo per utilizzare il valore di tale stringa di risorse per le variabili stringa del mio codice?

+0

solo ottenere il 'int', e quindi convertirlo in un 'String'? – Bigflow

+2

scusa, non capisco cosa stai proponendo. –

risposta

33

provare come utilizzare Resources.GetString per ottenere stringa da risorse di tipo stringa

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); 
+1

hmm, non riesco a vedere il metodo GetString. E per poter usare l'oggetto Risorse, ho bisogno di aggiungere lo spazio dei nomi Android.Content.Res. –

+0

@ eaon21: si vedere [Resources.GetString] (http://docs.mono-android.net/?link=M%3aAndroid.Content.Res.Resources.GetString%28int%29#) –

+0

L'ho visto! grazie .. comunque, ho usato Resources.System.GetString (id) ... Resources.GetString non esiste :( –

-5
int int_recordTable = Resource.String.RecordsTable; 

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

Prendi il int, quindi, trasformarlo in un String

+6

Poiché l'OP utilizza Xamarin, probabilmente sta codificando in .Net, non in Java. Inoltre, non penso che voglia solo convertire una int a una stringa, –

13

vale la pena notare che si fa non necessità di creare un'istanza di Resources per accedere alla tabella delle risorse. Questo funziona altrettanto bene:

using Android.App; 

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

GetString(), utilizzato in questo modo, è un metodo definito in astratto Context classe. È inoltre possibile utilizzare questa versione:

using Android.App; 

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

Resources, utilizzato in questo modo, è una proprietà di sola lettura sulla classe ContextWrapper, che Activity eredita dalla classe ContextThemeWrapper.

+0

molto più pulito – Joseph

2

Se non sei in un'attività o un altro contesto, si dovrebbe ottenere il contesto e usarlo per ottenere le risorse e PackageName, come il seguente esempio:

int resID = context.Resources.GetIdentifier(listEntryContact.DetailImage.ImageName, "drawable", context.PackageName); 
imageView.SetImageResource(resID); 
Problemi correlati