不推荐使用getDrawable(int),可能会产生NullPointerException

时间:2016-08-28 04:22:07

标签: java android imageview android-drawable

我在网上进行了研究,发现了有关比较图像和引用{​​{1}}文件夹内图像的相关但不太相似的信息。

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

我只关心我为drawable收到的已弃用邮件。

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

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

getDrawable()

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

enter image description here

enter image description here enter image description here

虽然我的程序正在运行,但我希望确保将来不要使用已弃用方法的错误。

我认为这很重要,因为就像我提到的那样,我用Google搜索并获得了使用哪种方法或语法的不同信息。

以下是可能遇到同样问题的其他用户的修改解决方案

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

3 个答案:

答案 0 :(得分:2)

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

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

有关详情和其他答案,请查看Android getResources().getDrawable() deprecated API 22

答案 1 :(得分:1)

在API级别22中不推荐使用

ContextCompat

使用if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { return resources.getDrawable(id, context.getTheme()); } else { return resources.getDrawable(id); } 进行访问: Improve Declaration File Acquisition

使用这种方式。

{{1}}

如此提及。 https://developer.android.com/reference/android/support/v4/content/ContextCompat.html#getDrawable(android.content.Context,%20int)

答案 2 :(得分:0)

对我有用。

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

More details