getDrawable(int) 已弃用,可能会产生 NullPointerException

getDrawable(int) is deprecated and may produce a NullPointerException

我在网上搜索了一下,发现有关比较图像和引用 drawable 文件夹中的图像的相关但不太相似的信息。

但是,通过遵循我在 Whosebug 中找到的答案之一,我能够比较两个图像并在单击按钮时在它们之间切换。

我只是担心 getDrawable(int).

收到的已弃用消息

获取可绘制图像并进行比较的真正正确方法或语法是什么? getDrawable() 似乎不是那个位置上的正确位置。

这是我的工作程序的代码和屏幕截图。

private class myButtonListener implements View.OnClickListener{
        @Override
        public void onClick(View view) {
            if(myImageView.getDrawable().getConstantState() ==
                    MainActivity.this.getResources().getDrawable(R.drawable.corgi).getConstantState() ){
                myImageView.setImageResource(R.drawable.goldenretriever);
            }else{
                myImageView.setImageResource(R.drawable.corgi);
            }
        }
    }

划掉 getDrawable() 方法的屏幕截图。

尽管我的程序正在运行,但我想确保避免将来因已弃用方法的实例而出错。

我认为这很重要,因为正如我提到的,我用谷歌搜索并获得了关于使用哪种方法或语法的不同信息。

修改解决方案给其他可能遇到相同问题的用户。

 private class myButtonListener implements View.OnClickListener{
        @Override
        public void onClick(View view) {
            if(myImageView.getDrawable().getConstantState().equals(
                    ContextCompat.getDrawable(MainActivity.this,R.drawable.corgi).getConstantState() ) ){
                myImageView.setImageResource(R.drawable.goldenretriever);
            }else{
                myImageView.setImageResource(R.drawable.corgi);
            }
        }
    }

getDrawable() 在 API 级别 22 中被弃用。

使用 ContextCompat 来访问这个: https://developer.android.com/reference/android/support/v4/content/ContextCompat.html#getDrawable(android.content.Context,%20int)

这样使用。

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    return resources.getDrawable(id, context.getTheme());
} else {
    return resources.getDrawable(id);
}

如这里所述。

是的,您需要更改已弃用的代码:-

ContextCompat.getDrawable(getActivity(), R.drawable.name);

有关详细信息和其他答案,请查看

对我有用。

ResourcesCompat.getDrawable(getResources(), R.drawable.name, null));

More details