Toast прекрасный способ оповестить пользователя о чем то, не блокируя интерфейс. У них можно завадать отзывы, показывать в разных местах и даже делать кастомные view и все это с помощью fluent interface. Уверен, что читатели если и слышали о таких расширенных возможностях, то никогда не пользовались этим. Самый стандартный юзкейс - показать текст.
По моему опыту часто нужно показать toast как результат не успешной процедуры, которая обычно выполняется в фоне в отдельном треде или воркере, т.е. не в UI. А для этого приходится писать лапшу только для того, Toast.makeText(...).show() выполнился в UI треде.
Для этого набросал сниппет, который уменьшит количество кода и ошибки, связанные с вызовом тоста из нетого потока и банальному забыванию метода show().
Было
Toast.makeText(this,
getText(R.string.messages_storage_invalid),
Toast.LENGTH_SHORT).show();
Стало
toastShort(R.string.messages_storage_invalid);
Причем метод можно вызывать из любого потока. Показыватся тост будет из UI треда через runnable
Для этого в базовом классе (для всех activity), а я надеюсь он у вас есть, иначе java особо раздражает из за невозможности добавить поведения(или множественное насследование) нужно описать следующее:
public abstract class BaseActivity extends Activity {
private Handler mHandler = new Handler();
/**
* Shortcut for makeToast
* @param str to display
*/
public void toastLong(final String str) {
mHandler.post(new Runnable() {
@Override
public void run() {
Toast.makeText(BaseActivity.this, str, Toast.LENGTH_LONG).show();
}
});
}
/**
* Shortcut for makeToast with i18n
* @param stringResId to display
* @param args argument for format if any
*/
public void toastLong(final int stringResId, Object... args) {
toastLong(getString(stringResId, args));
}
/**
* Shortcut for makeToast short
* @param str to display
*/
public void toastShort(final String str) {
mHandler.post(new Runnable() {
@Override
public void run() {
Toast.makeText(BaseActivity.this, str, Toast.LENGTH_SHORT).show();
}
});
}
/**
* Shortcut for makeToast short with i18n
* @param stringResId to display
* @param args argument for format if any
*/
public void toastShort(final int stringResId, Object... args) {
toastShort(getString(stringResId, args));
}
}