我目前正在尝试编写一个有4个盒子的记忆游戏,在4个盒子中将有4个随机选择。然后用户必须记住它们并以正确的顺序输入4个框。
但我目前面临一个问题。好像handler
只允许final variable
。这是我的代码:
private OnClickListener click1 = new OnClickListener() {
@Override
public void onClick(View v) {
final ImageButton[] all= {btn1, btn2, btn3, btn4};
for (int a=0;a<4;a++) {
handler1.postDelayed(new Runnable() { //start delay a
@Override
public void run() {
//actions start
btn5 = all[random.nextInt(all.length)];
btn5.setBackgroundColor(Color.RED);
handler1.postDelayed(new Runnable() { //start delay b
@Override
public void run() {
btn5.setBackgroundResource(R.drawable.btn_default_holo_dark);
}}, 500); //end delay b
//action end
}}, 1000*a ); //end delay a
}
}
};
我尝试在其中放置4 variable
来存储btn5
的数据,但它不起作用,并显示错误,因为a
必须是最终的。
btn5 = all[random.nextInt(all.length)];
if (a==0) {ans1 = btn5;} //error
else if (a==1) {ans2 = btn5;} //error
else if (a==2) {ans3 = btn5;} //error
else if (a==3) {ans4 = btn5;} //error
btn5.setBackgroundColor(Color.RED);
是否有任何方法允许我的if else
声明?或者是否有其他方法可以让我按顺序存储btn5
数据?
答案 0 :(得分:0)
在监听器之外,在类级别声明您的all
数组并重复使用
答案 1 :(得分:0)
一种方法是在for循环中声明final
变量,以便匿名内部类可以访问它。因此,请在handler1.postDelayed(new Runnable() { //start delay a
之前添加此行:
final int aValue = a;
然后用a
替换 if / if else 的aValue
。像这样:
if (aValue==0) {ans1 = btn5;}
匿名内部类如何获取for循环中声明的值。