每个人。单击ImageView后,我希望根据当前显示的可绘制对象的类型来更改它。为此,我将ImageView中当前设置的图像与可绘制对象文件夹中的图像进行比较。不幸的是,当前的情况是只执行else分支。第一次单击后图像会更改,但之后不再切换。我做错了什么?
bookmark_site.setOnClickListener{
vibrator.vibrate(50);
var draw = bookmark_site.drawable.constantState
if(draw == ContextCompat.getDrawable(this,R.drawable.ic_baseline_bookmark_filled_24)?.constantState)
{
bookmark_site.setImageDrawable(resources.getDrawable(R.drawable.ic_outline_bookmark_border_outline_24))
}
else{
//Only this two is ever executed
bookmark_site.setImageDrawable(resources.getDrawable(R.drawable.ic_baseline_bookmark_filled_24))
}
}
2条答案
按热度按时间yfjy0ee71#
你不能基于
constantState
,不希望比较可绘制对象,因为每个可绘制对象都有不同的示例,因此你的if
是不是true
从来没有.事实上有没有办法为获取资源的drawable已经设置为ImageView
.最方便的方法将是保持一些boolean标志外部onClick
方法通知这图像是切换或不.可选地,您可以使用setTag(...)
方法将此标志保留在ImageView
“内部”rjee0c152#
你应该在模型类中保留类别或标签沿着图像,然后根据标签或类别改变图像。