2013-04-09 15 views
24

Właśnie zaczynam tworzyć prostą aplikację na Androida z wykorzystaniem Xamarin za pomocą VS2012. Wiem, że istnieje typ zasobu tylko dla ciągów. W folderze moim zasobów, mam pliku xml jak poniżej:(Android Xamarin) Uzyskaj wartość ciągu zasobów zamiast 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> 

w moim kodu, chcę użyć wartości tych zasobów, takich jak:

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

wiem, że Resource.String.<key> zwraca liczbę całkowitą więc nie mogę użyć powyższego kodu. Mam nadzieję, że zmienna recordTable będzie miała wartość records.

Czy istnieje sposób, w jaki mogę użyć wartości tych ciągów zasobów dla zmiennych łańcuchowych mojego kodu?

+0

prostu się 'int' i następnie przekonwertować go na 'String'? – Bigflow

+2

Przepraszam, nie mogę zrozumieć, co proponujesz. –

Odpowiedz

33

spróbować, jak przy użyciu Resources.GetString uzyskania ciąg ze środków smyczkowych

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, nie widzę metody GetString. Aby móc korzystać z obiektu Resources, muszę dodać obszar nazw Android.Content.Res. –

+0

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

+0

Widziałem to! dzięki ... jednak użyłem Resources.System.GetString (id) ... Resources.GetString nie istnieje :( –

-5
int int_recordTable = Resource.String.RecordsTable; 

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

Get int, a następnie zmienić go na String

+6

Ponieważ OP używa Xamarina, prawdopodobnie koduje w .Net, a nie w Javie. Również nie sądzę, że po prostu chce przekonwertować int do String –

13

Warto zauważyć, że robisz nie potrzebę utworzyć instancję Resources, aby uzyskać dostęp do tabeli zasobów. To działa równie dobrze:

using Android.App; 

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

GetString(), używane w ten sposób, to metoda zdefiniowana na abstrakcyjnym Context klasie. Można również użyć tej wersji:

using Android.App; 

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

Resources, używany w ten sposób, jest właściwością tylko do odczytu na klasie ContextWrapper, co Activity dziedziczy z klasy ContextThemeWrapper.

+0

o wiele czystszy sposób – Joseph

2

Jeśli nie jesteś w działalności lub innym kontekście, należy uzyskać kontekst i użyj go, aby uzyskać zasobów i packageName, jak w poniższym przykładzie:

int resID = context.Resources.GetIdentifier(listEntryContact.DetailImage.ImageName, "drawable", context.PackageName); 
imageView.SetImageResource(resID); 
Powiązane problemy