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));
我在网上搜索了一下,发现有关比较图像和引用 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));