Toast.makeText из строки ресурса - PullRequest
       1

Toast.makeText из строки ресурса

3 голосов
/ 06 февраля 2012

У меня есть класс с именем MyPrimaryClass, у этого класса есть кнопка ведьма при нажатии, которая создает Intent с классом myClassForResult.

Я использую это для его запуска:

startActivityForResult(myIntentOfMyClassForResult, ACTIVITY_EDIT_BTEXT);

ОбаMyPrimaryClass и myClassForResult расширяют Activity.

Итак, когда я вызываю Toast.makeText в myClassForResult, с текстовым параметром R.string.my_resource_string, это дает мне принудительное закрытие!

У меня естьпробовал это:

Context c = myClassForResult.this;
Toast toast = Toast.makeText(c,
    c.getResources().getString(R.string.my_resource_string),
    Toast.LENGTH_SHORT);
toast.show();

Также это: c = getApplicationContext ()

Также это: c = getBaseContext ()

Также это:

Context c = MyPrimaryClass.this;
Toast toast = Toast.makeText(c,
    R.string.my_resource_string,
    Toast.LENGTH_SHORT);
toast.show();

Если я использую строковую строку, например «My toast Text!», Это работает.Но мне нужно получить строку из ресурсов.

-Проблема решена:

Чтобы решить проблему, я изменил продолжительность тоста на Toast.LENGTH_LONG

Строка R.string.my_resource_string значение равно «Заголовок пуст»

Когда я изменяю его значение на «Заголовок», оно работает правильно, поэтому я предполагаю, чтоСтрока была слишком длинной для продолжительности Toast.LENGTH_SHORT.

Но когда я изменил продолжительность на Toast.LENGTH_LONG , я мог бы использовать длинную строку.

Context c = MyPrimaryClass.this;
Toast toast = Toast.makeText(c,
    R.string.my_resource_string,
    Toast.LENGTH_LONG);
toast.show();

Ответы [ 4 ]

3 голосов
/ 06 февраля 2012

Попробуйте:

Toast.makeText(this, this.getString(R.string.my_resource_string), Toast.LENGTH_SHORT);
2 голосов
/ 02 ноября 2015

@ dilipkaklotar Ответил правильно, но нужно сделать несколько изменений:

, как это работает для меня

Toast.makeText(getApplicationContext(),
getApplicationContext().getResources().getString(R.string.message),
Toast.LENGTH_SHORT).show();

getResources не содержит скобок ().и в конце .show ();не toShow ().

но это правильно.так что большое спасибо.

2 голосов
/ 06 февраля 2012

Стоит отметить:

Toast toast = Toast.makeText(c,
    c.getResources().getString(R.string.my_resource_string),
    Toast.LENGTH_SHORT);
toast.show();

Можно упростить до:

Toast.makeText(c,
    c.getResources().getString(R.string.my_resource_string),
    Toast.LENGTH_SHORT).show();

Это спасет вас от ссылки на объект, который вам не нужен.

Одна вещь, которую вам нужно понять, это то, что всякий раз, когда вы ссылаетесь на R в своем пакете (не android.R.), Вы будете иметь доступ к своим ресурсам, пока у вас есть Context.

Обновление

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

Метод startActivityForResult (xx) обычно используется, когда вы хотите запустить приложение, которое находится за пределами вашего пакета для результата.

Например, : если бы я хотел получить штрих-код из продукта, то я бы начал Intent для этого класса штрих-кода, косвенно через действие.Затем я бы извлек данные, используя onActivityResult (xx).

Нет смысла сделать это для ваших собственных классов.

0 голосов
/ 06 февраля 2012
Toast.makeText(getApplicationContext(), getApplicationContext().getResources.getString(R.string.imgval), Toast.LENGTH_SHORT).toShow();
...