Почему AppCompatResources.getDrawable (Context context, int resId) помечен как @Nullable - PullRequest
0 голосов
/ 20 сентября 2019

AppCompatResources.getDrawable, вероятно, возвращает ноль, если идентификатор ресурса недействителен, или ссылается на что-то другое, чем рисуемое.Есть ли какая-либо другая причина, по которой getDrawable (context, Остаток) возвращает ноль?

Я иногда сталкиваюсь с таким кодом, имеет ли смысл здесь проверка на нуль?:

initToolbar() {
    ActionBar actionBar = getSupportActionBar();
    Drawable drawable = AppCompatResources.getDrawable(getContext(), R.drawable.ic_close_24dp);
    //is there any reason to check for null    
    if (drawable != null) {
        drawable.setColorFilter(ColorUtil.getColorPrimary(requireContext()), PorterDuff.Mode.MULTIPLY);
        actionBar.setHomeAsUpIndicator(drawable);
    } else {
        actionBar.setHomeAsUpIndicator(ic_close_primary_24dp);
    }
}

Причиной появления такого кода является то, что студиявыдаст предупреждение для кода, подобного этому:

mToolbar.setNavigationIcon(R.drawable.ic_24_close);
mToolbar.getNavigationIcon().setColorFilter(filter); //warning here, but should I react to it?

1 Ответ

0 голосов
/ 20 сентября 2019

Это потому, что AppCompatDrawableManager.getDrawable() может вернуть null:

    public Drawable getDrawable(@NonNull Context context, @DrawableRes int resId,
            boolean failIfNotKnown) {
        checkVectorDrawableSetup(context);
        Drawable drawable = loadDrawableFromDelegates(context, resId);
        if (drawable == null) {
            drawable = createDrawableIfNeeded(context, resId);
        }
        if (drawable == null) {
            drawable = ContextCompat.getDrawable(context, resId);
        }
        if (drawable != null) {
            // Tint it if needed
            drawable = tintDrawable(context, resId, failIfNotKnown, drawable);
        }
        if (drawable != null) {
            // See if we need to 'fix' the drawable
            DrawableUtils.fixDrawable(drawable);
        }
        return drawable;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...