在录制ImageView
时,我想将其替换为其他drawable,具体取决于之前的drawable,我做了一些研究:
ImageView imgview = (ImageView) findViewById(R.id.imageView1);
imgview.setOnClickListener(new OnClickListener() {
public void onClick(View view) {
ImageView imageView = (ImageView) view;
assert(R.id.imageView1 == imageView.getId());
Integer integer = (Integer) imageView.getTag();
integer = integer == null ? 0 : integer;
switch (integer) {
case R.drawable.number1:
imageView.setImageResource(R.drawable.number2);
imageView.setTag(R.drawable.number2);
break;
case R.drawable.number2:
imageView.setImageResource(R.drawable.number3);
imageView.setTag(R.drawable.number3);
break;
case R.drawable.number3:
imageView.setImageResource(R.drawable.number4);
imageView.setTag(R.drawable.number4);
break;
default:
Toast.makeText(MainActivity.this, "exceeded", Toast.LENGTH_SHORT).show();
}
}
});
}
问题是应用程序始终调用toast
中的default
消息。它会在case
部分中进行所有其他处理/验证。
有任何想法请解决这个问题吗?
非常感谢。
答案 0 :(得分:2)
创建它时,您可能没有将可绘制ID设置为ImageView
的标记,例如:
ImageView imgview = (ImageView) findViewById(R.id.imageView1);
imgview.setImageResource(R.drawable.number1);
// ...
并且整数变为0
,避免了所有switch
的情况。测试并查看整数的值是什么(我会说它是0
)。
你不能在xml中设置一个整数作为标记,所以唯一的选择是在代码中设置它,你可能没有做的事情(至少在你发布的代码中没有)。
另一种方法:
final int[] ids = {R.drawable.number1, R.drawable.number2, R.drawable.number3};
b1.setOnClickListener(new OnClickListener() {
int counter = 0;
@Override
public void onClick(View v) {
if (counter % 3 == 0) {
v.setBackgroundResource(ids[0]);
} else if (counter % 3 == 1){
v.setBackgroundResource(ids[1]);
} else if (counter % 3 == 2){
v.setBackgroundResource(ids[2]);
}
counter++;
}
});
答案 1 :(得分:2)
原因是
您已撰写以下声明
integer = integer == null ? 0 : integer;
因此,第一次在click块中达到控制,时间标记将为null,而上述语句将使其为0. 但是您无法处理案例0 。
因此,在每种情况下,您的标记都将为0,这将导致默认块执行。如果您将标记设置为0,则必须将开关大小写为0.否则,它将始终为0,并且默认块将继续执行。< / p>
您的代码段应该如下所示。
ImageView imgview = (ImageView) findViewById(R.id.imageView1);
imageView.setImageResource(R.drawable.number1);
imageView.setTag(R.drawable.number1);
imgview.setOnClickListener(new OnClickListener() {
public void onClick(View view) {
ImageView imageView = (ImageView) view;
assert(R.id.imageView1 == imageView.getId());
Integer integer = (Integer) imageView.getTag();
switch (integer) {
case R.drawable.number1:
imageView.setImageResource(R.drawable.number2);
imageView.setTag(R.drawable.number2);
break;
case R.drawable.number2:
imageView.setImageResource(R.drawable.number3);
imageView.setTag(R.drawable.number3);
break;
case R.drawable.number3:
imageView.setImageResource(R.drawable.number4);
imageView.setTag(R.drawable.number4);
break;
default:
Toast.makeText(MainActivity.this, "exceeded", Toast.LENGTH_SHORT).show();
imageView.setImageResource(R.drawable.number1); <----You should reset it to number 1
imageView.setTag(R.drawable.number1);
}
}
});
}