0

我有一个包含两列的 SQlite 表_idname. 出于国际化目的,我将名称存储为R.string.today Now I want to get string resource associated with R.string.today

String column = myCursor.getString(myCursor.getColumnIndex(MainDb.NAME));

int resId = getApplicationContext().getResources().getIdentifier(column, "strings", getApplicationContext().getPackageName());

String buttonText;

if (resId != 0)
{
  buttonText = getApplicationContext().getString(resId);
} else
{
  buttonText = "Resource is null!";
} 

resId始终为 0。变量column具有正确的值,我已经用调试器检查过了。我尝试了不同的变化resId

  1. “字符串”而不是 defType 中的“字符串”。
  2. getResources 的不同变体,例如 Resources.getSystem()...
  3. getPackageName() 的不同变体

我做错了什么?

4

2 回答 2

2

我认为应该string代替strings

int resId = getApplicationContext().getResources()
           .getIdentifier(column, "string", getApplicationContext().getPackageName());

column还要检查dsigns的值是否表示您的strings.xml.

是一个很好的例子。

ps:而R.string.today不仅仅是存储todaystore提取R.string.today.

Resources r = getResources();
r.getIdentifier("today", "string", getPackageName()));
r.getIdentifier("R.string.today", "string", getPackageName())); // doesn't work
r.getIdentifier("R.string.today".replaceAll(".*\\.", ""), "string", getPackageName()));

只有第一部和第三部作品。

于 2013-08-29T06:08:54.993 回答
0

试试这个

String str = context.getString(R.string.resId);
于 2013-08-29T06:09:06.220 回答