我的应用程序中有几个按钮可以有不同的背景图像。
现在,在OnClick
函数中,我需要检查背景图像是否是drawable中的图像名称“williboese”。
我试过这样:
b.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
//b.setBackgroundColor(R.color.redwue);
count++;
if(arg0.getResources().equals(R.drawable.williboese)){
Toast.makeText(MainActivity.this, "heeeee", Toast.LENGTH_SHORT).show();
}
}
});
我知道此刻b
有这个背景图片,但没有显示Toast。我做错了什么?
答案 0 :(得分:1)
最简单的方法可能就是使用这样的标签:
btn.setTag(R.drawable.williboese);
然后与
进行比较view.getTag().equals(R.drawable.williboese);
因为R.drawable是一个原语,这段代码不会完全正常工作,但你明白了......
您的代码有什么问题,您要将drawable的资源ID与视图的“resources”对象进行比较。你可以尝试:
arg0.getResources().getDrawable(R.drawable.williboese).equals(arg0.getBackground())
答案 1 :(得分:1)
在这里,您要尝试将Resources
与int
进行比较,而true
永远不会View
...
这个技巧可以帮助你......
设置后台资源ID时,请将该ID设置为b.setBackgroundResource(R.drawable.williboese);
b.setTag(R.drawable.williboese);
的标记。
OnClickListener
并在b.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
int resId = (Integer) view.getTag();
if(resId == R.drawable.williboese) {
// background is R.drawable.williboese image
}
}
});
中,您可以查看当前背景可绘制的内容......
{{1}}
答案 2 :(得分:1)
getResources不会返回您的想法,您可以在函数源中看到
private final Resources mResources;
public View(Context context) {
mContext = context;
mResources = context != null ? context.getResources() : null;
...
}
public Resources getResources() {
return mResources;
}
它只返回与context.getResources()相同的内容,用于访问应用程序中的资源。
您无法检索视图背景的ID。你必须将它保存在别处。为此,您可以使用视图的setTag函数,您可以在其中保存以后可以检索的任何内容。 http://developer.android.com/reference/android/view/View.html#setTag(java.lang.Object)
b.setBackgroundResource(R.drawable.williboese);
b.setTag(R.drawable.williboese);
然后在监听器中进行比较
Integer i = (Integer) view.getTag();
if(i!= null && i == R.drawable.williboese) {
}