如果那么其他人不能在Android / Confusion中使用final

时间:2016-01-16 22:13:17

标签: android onclicklistener

我在Android中遇到了问题。我想有条件地设置drawable并同时更改boolean

如果点击button,则会获得一个框架,boolean设置为true。如果再次单击,框架将消失,boolean将设置为false

只有if的第一部分正常工作。因此,如果我单击button,则会设置框架,但如果再次单击,则不会消失。正确定义了两个drawables

这会在onClickListeners内将buttons设置为array

    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);
            }
        });
    }

}

这是被叫方法isLockedarray,其中包含属于booleans的{​​{1}}。我知道这不是最聪明/最好的解决方案,但由于其他代码需要它。

buttons

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:2)

final boolean locked = isLocked[j];

这里的值被冻结,并且在OnClickListener.onClick(View v)内的以下调用中永远不会更改。

虽然更改了数组项目(仅限第1次 - 您观察到的内容)。

要做到正确,请摆脱locked param:

public void setLock(int finalJ, Button button) {
  boolean locked = isLocked[finalJ];
  ....
  isLocked[finalJ] = !isLocked[finalJ];
}