我尝试使用其中一个按钮的ID设置标记:
int boeserzufall = (int) (Math.random()*23);
Button boese = arr.get(boeserzufall);
boese.setBackgroundResource(R.drawable.williboese);
boese.setTag(R.drawable.williboese);
工作正常,boese.getTag()
为我带来了正确的身份证明。 arr
是ArrayList<Button>
,其中包含我的所有按钮。
现在在我的OnClick()方法中,我想检查当前按钮是否与boese
具有相同的resId
b5.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
count++;
int resId = (Integer) arg0.getTag();
if(resId == R.drawable.williboese) {
Toast.makeText(MainActivity.this, "heeeee", Toast.LENGTH_SHORT).show();
}
}
});
我的问题是,当我尝试阅读arg0.getTag()
修改
首先,我从数组中取出一个随机按钮,因此我想用R.drawable.williboese
设置背景图像。
因此,在我的25个按钮中,我的背景图像与其他图像不同。这个我必须找到并做出与其他人不同的反应......
答案 0 :(得分:1)
如果按钮没有标记,当您的代码尝试将标记解包到int
时,您将获得NPE。如果您确定唯一的标记是Integer
个对象,则可以尝试这样做:
b5.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
count++;
Integer resId = (Integer) arg0.getTag();
if(resId != null && resId == R.drawable.williboese) {
Toast.makeText(MainActivity.this, "heeeee", Toast.LENGTH_SHORT).show();
}
}
});
如果标签可能存在并且不是Integer
,那么您还应该防范ClassCastException
(或声明resId
为{{1}并使用Object
替换resId != null
并仅在传递时执行转换。
但是,查看整体逻辑,您可能会发现View.findViewWithTag(Object)
是一种有用的方法,可以绕过测试。
答案 1 :(得分:1)
根据您的上一次编辑,您只在25个特定按钮上设置了一个标记。这是一个自动装入整数的int。您甚至不需要标记的值,因为这仅在该特定按钮上为非null。这应该做:
public void onClick(View view) {
count++;
if(view.getTag() != null) {
Toast.makeText(MainActivity.this, "heeeee", Toast.LENGTH_SHORT).show();
}
}