Динамические строковые ресурсы Android - PullRequest
6 голосов
/ 29 декабря 2011

в моем приложении я делаю веб-запрос, который возвращает некоторый код результата, например, 105. У меня есть строковые ресурсы, которые выглядят так

<string name="r105">O.K.</string>
<string name="r106">Something went wrong.</string>
<string name="r333">Fatal error.</string>

Теперь я хочу сделать что-то подобное

Toast.makeText(parent.getApplicationContext(),
        parent.getString(R.string.r+resultCode), Toast.LENGTH_LONG).show();

, а r+resultCode - идентификатор ресурса.

Это не работает.Есть идеи, как это сделать?

Ответы [ 4 ]

15 голосов
/ 29 декабря 2011

Попробуйте просто getResources().getIdentifier(name, defType, defPackage).

Toast.makeText(this, getResources().getIdentifier("r"+resultcode, "string", 
getPackageName()), Toast.LENGTH_LONG).show();
4 голосов
/ 29 декабря 2011

Вы можете сделать это, используя getResources().getIdentifier(name, defType, defPackage).Как то так:

// Assuming resultCode is an int, use %s for String
int id = getResources().getIdentifier(String.format("r%d", resultCode), 
                                      "string", getPackageName());
String result = getString(id);
0 голосов
/ 27 апреля 2015

Простой способ получения идентификатора ресурса из строки. Здесь resourceName - это имя ресурса ImageView в папке drawable, которое также включено в XML-файл. Я получаю «id», вы можете использовать «string».

int resID = getResources().getIdentifier(resourceName, "id", getPackageName());
ImageView im = (ImageView) findViewById(resID);
Context context = im.getContext();
int id = context.getResources().getIdentifier(resourceName, "drawable",
context.getPackageName());
im.setImageResource(id);
0 голосов
/ 29 декабря 2011

Попробуйте, как показано ниже, это работает для меня. Используйте parent.getApplicationContext() для вас.

String str = getString(R.string.r)+resultCode;

        Toast.makeText(getApplicationContext(),
                str, Toast.LENGTH_LONG).show();
...