If then else 不能在 Android/Confusion 中使用 final
If then else not working in Android/Confusion with final
我在 Android 中遇到问题。我想有条件地设置一个 drawable
并同时更改一个 boolean
。
如果单击 button
,它会得到一个框架,并且 boolean
设置为 true
。如果再次单击它,框架将消失并且 boolean
设置为 false
。
只有 if 的第一部分有效。因此,如果我单击 button
,框架已设置,但如果我再次单击,它不会消失。两个 drawables
定义正确。
这会在 array
内将 onClickListeners
设置为 buttons
。
for (int j = 0; j < dice.length; j++) {
final Button temp = dice[j];
final boolean locked = isLocked[j];
final int finalJ = j;
dice[j].setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
setLock(locked, finalJ, temp);
}
});
}
}
这是被调用的方法 isLocked
是一个 array
包含属于 buttons
的 booleans
。我知道这不是 smartest/best 解决方案,但由于代码的其余部分,它是必需的。
public void setLock(boolean locked, int finalJ, Button button) {
if (!locked) {
button.setBackgroundDrawable(getResources().getDrawable(R.drawable.dice_locked));
} else {
button.setBackgroundDrawable(getResources().getDrawable(R.drawable.dice));
}
isLocked[finalJ] = !isLocked[finalJ];
}
有人能帮忙吗?
final boolean locked = isLocked[j];
这里的值被冻结并且在 OnClickListener.onClick(View v)
内的后续调用中永远不会改变。
数组项已更改(仅第一次 - 您已观察到)。
为了使它正确,去掉 locked
参数:
public void setLock(int finalJ, Button button) {
boolean locked = isLocked[finalJ];
....
isLocked[finalJ] = !isLocked[finalJ];
}
我在 Android 中遇到问题。我想有条件地设置一个 drawable
并同时更改一个 boolean
。
如果单击 button
,它会得到一个框架,并且 boolean
设置为 true
。如果再次单击它,框架将消失并且 boolean
设置为 false
。
只有 if 的第一部分有效。因此,如果我单击 button
,框架已设置,但如果我再次单击,它不会消失。两个 drawables
定义正确。
这会在 array
内将 onClickListeners
设置为 buttons
。
for (int j = 0; j < dice.length; j++) {
final Button temp = dice[j];
final boolean locked = isLocked[j];
final int finalJ = j;
dice[j].setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
setLock(locked, finalJ, temp);
}
});
}
}
这是被调用的方法 isLocked
是一个 array
包含属于 buttons
的 booleans
。我知道这不是 smartest/best 解决方案,但由于代码的其余部分,它是必需的。
public void setLock(boolean locked, int finalJ, Button button) {
if (!locked) {
button.setBackgroundDrawable(getResources().getDrawable(R.drawable.dice_locked));
} else {
button.setBackgroundDrawable(getResources().getDrawable(R.drawable.dice));
}
isLocked[finalJ] = !isLocked[finalJ];
}
有人能帮忙吗?
final boolean locked = isLocked[j];
这里的值被冻结并且在 OnClickListener.onClick(View v)
内的后续调用中永远不会改变。
数组项已更改(仅第一次 - 您已观察到)。
为了使它正确,去掉 locked
参数:
public void setLock(int finalJ, Button button) {
boolean locked = isLocked[finalJ];
....
isLocked[finalJ] = !isLocked[finalJ];
}