gpt4 book ai didi

android - 为什么 AppCompatResources.getDrawable(Context context, int resId) 标记为@Nullable

转载 作者:行者123 更新时间:2023-12-05 00:05:42 27 4
gpt4 key购买 nike

AppCompatResources.getDrawable 如果资源 ID 无效或链接到其他可绘制对象,则可能返回 null。 getDrawable(context, resid) 返回 null 是否还有其他原因?

我有时会遇到这样的代码,这里的null检查是否合理?:

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);
}
}

之所以会出现这样的代码,是因为studio会对这样的代码发出警告:

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

最佳答案

这是因为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;
}

关于android - 为什么 AppCompatResources.getDrawable(Context context, int resId) 标记为@Nullable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58023623/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com