LINUX.ORG.RU

Android: Как загрузить ресурсы налету (on runtime)


0

1

Привет, ЛОР!

Мне нужна помощь в следующем вопросе. Как создать Toast c некоторым сообщением, прочитав его налету из, например, values/strings.xml?

Я пишу многоязычное приложение, а ресурсы в Android - прекрасный инструмент для автоматической локализации. Например я обслуживаю две локализации en_GB (стандартно values/strings.xml) и ru_RU (values-ru/strings.xml). Теперь мне бы хотелось поттягивать сообщения для пользователя в зависимости от его настроек локализации.


К примеру, создадим следующие ресурсы

values/strings.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="str_example">String example</string>
</resources>


values-ru/strings.xml

<?xml version="1.0" encoding="utf-8"?>
<!-- russian alternative -->
<resources>
    <string name="str_example">Строка для примера</string>
</resources>


Я пробовал разные способы доступа к ресурсам типа String:


Пример 1.

Toast.makeText(this,
    getResources().getString(R.string.str_example),
    Toast.LENGTH_LONG).show();


Пример 2. (после гугльошки)

int resID = getResources().getIdentifier(
        "str_example",
        "string",
        getPackageName());
Toast.makeText(this,
    getResources().getString(resID),
    Toast.LENGTH_LONG).show();


После запуска получаю один и тот же результат - приложение посыпалось.


P.S. Также перепробовал все известные мне контексты:
1) this
2) CurrentActivity.this
3) Передавал Context параметром в функцию
4) getApplicationContext()
5) getBaseContext()

StackTrace

Покажи StackTrace ошибки (то, что выбрасывает в LogCat), так как в примерах кода (и в ресурсах) ошибок, на первый взгляд, нет.

anonymous
()

У меня прекрасно работают такие конструкции:

 Toast.makeText(this, R.string.network_error,Toast.LENGTH_LONG).show();
где this это текущее активити.

покажи stack trace

Vinick ★★
()
Ответ на: комментарий от Vinick

Интересно попробовать :) Просто я сначала думал, что все же те ресурсьі нужно считать как-то.

ddmytrenko
() автор топика
Ответ на: комментарий от Boy_from_Jungle

Контекстьі передавал всевозможньіе :)

ddmytrenko
() автор топика
Ответ на: комментарий от Vinick

Тема закрьіта

Да, спасибо! Єто оно! Дело в том, что вьізов getResources() не особо работает со static :)

Тоесть, нужно просто передавать id ресурса и єтого, о чудо, хватает.

ddmytrenko
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.