Перед передачей Context
в тост, вы всегда должны проверять правильность контекста, который вы собираетесь использовать.В моих приложениях я использую метод проверки контекста, который я сделал:
public static boolean isContextValid(Context context, Fragment fragment) {
if (context instanceof Activity) {
Activity activity = (Activity) context;
if (activity.isFinishing() || (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1 && activity.isDestroyed())) {
return false;
}
}
return context != null && (fragment == null || (fragment.isAdded() && !fragment.isRemoving());
}
Вы можете передать только контекст, или также Fragment
, если ваш текущий контекст является фрагментом.Этот метод проверяет, является ли контекст Activity
, в этом случае мы проверяем, заканчивается ли действие / уничтожено.
Если вы хотите отобразить тост после жизненного цикла фрагмента, также перейдите к методу, который вы используете в текущем фрагменте, чтобы мы могли определить, является ли фрагмент все еще видимым и прикрепленным к действию.
BONUS ANDROID 7.1
В API 25 этого недостаточно, и иногда устройство по-прежнему аварийно завершает работу с предоставленной вами трассировкой стека.
Этот репозиторий может бытьрешение, поскольку оно оборачивает ошибочный вызов в предложение try / catch.Конечно, это не лучшая вещь, но, по крайней мере, она решает эту досадную ошибку для устройств 7.1.