web-dev-qa-db-ja.com

(Android Xamarin)intの代わりにリソース文字列値を取得します

私は単純なAndroidアプリをVS2012を使用してXamarinを使用して作成し始めています。文字列専用のリソースのタイプがあることを知っています。私のリソースフォルダーには、次のようなxmlファイルがあります。 :

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

私のコードでは、次のようなリソースの値を使用したいと思います。

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

そんなこと知ってる Resource.String.<key>は整数を返すため、上記のコードを使用できません。 recordTable変数の値がrecordsになることを期待しています。

これらのリソース文字列の値をコードの文字列変数に使用する方法はありますか?

26
raberana

文字列リソースから文字列を取得するために Resources.GetString を使用して試してください

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

注目に値するnotリソーステーブルにアクセスするには、Resourcesのインスタンスを作成する必要があります。これは同様にうまく機能します:

_using Android.App;

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

このように使用されるGetString()は、抽象Contextクラスで定義されたメソッドです。このバージョンを使用することもできます:

_using Android.App;

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

Resourcesはこのように使用され、ContextWrapperクラスの読み取り専用プロパティであり、ActivityContextThemeWrapperクラスから継承します。

13
Tieson T.

アクティビティまたは別のコンテキストにいない場合は、次の例のように、コンテキストを取得し、それを使用してResourcesおよびPackageNameを取得する必要があります。

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