获取资源字符串值而不是整型值 (Android Xamarin)

28

我刚开始使用Xamarin和VS2012创建一个简单的Android应用程序。 我知道有一种专门用于字符串的资源类型。 在我的资源文件夹中,我有一个像这样的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的值。

是否有一种方法可以将这些资源字符串的值用于我的代码字符串变量中?


只需获取整数 (int),然后将其转换为字符串 (String)? - Bigflow
2
抱歉,我无法理解您提出的建议。 - raberana
4个回答

39

尝试使用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);

1
嗯,我看不到GetString方法。为了能够使用Resources对象,我需要添加Android.Content.Res命名空间。 - raberana
@eaon21:是的,请查看Resources.GetString - ρяσѕρєя K
我看到了!谢谢...不过,我使用的是 Resources.System.GetString(id)...Resources.GetString 不存在 :( - raberana
@eaon21:取决于您如何调用getString方法。 - ρяσѕρєя K
2
我认为我没有看到Resources.GetString()的原因是因为我正在使用C#编码。我猜你必须在C#中使用Resources.System.GetString()。 - raberana
有没有办法以编程方式设置资源? - Younis Qadir

13
值得注意的是,您不需要创建 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);
    }
}

ResourcesContextWrapper 类的只读属性,Activity 继承自 ContextThemeWrapper 类。


3

如果您不在活动或其他上下文中,应获取上下文并使用它来获取资源和包名,如以下示例:

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

-5
int int_recordTable = Resource.String.RecordsTable;

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

获取int,然后将其转换为String


6
由于OP使用的是Xamarin,他很可能在使用.Net进行编码,而不是Java。另外,我认为他并不只想将一个int转换为字符串。 - heijp06

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接