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 包含属于 buttonsbooleans。我知道这不是 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];
}