即使初始化为1,OnClickListener内的标志默认为0?

时间:2016-02-16 01:28:40

标签: java android button listener onclicklistener

我尝试制作双人Tic-Tac-Toe应用,并且需要在相同的按钮(b[][])上发生两件不同的事情,或者将文字""转为"O""X",取决于轮到谁了。

在这里,我有一个默认为1的旗帜,这应该标志着它的玩家1(O' s)转向。运行该程序,它总是玩家2(X' s)无论如何转。

我对onClickListener的工作方式感到有些困惑。我可以看到,可能会立即调用条件flag == 1,立即将标志设置为0?对我来说,它仍然没有意义,它首先没有完成将按钮文本设置为"O"的过程。怎么了?我该如何解决这个问题?

class MyClickListener implements View.OnClickListener {
            int x;
            int y;


            public MyClickListener(int x, int y) {
                this.x = x;
                this.y = y;
            }


            public void onClick(View view) {

                int flag = 1;

                if (b[x][y].isEnabled()) {
                    b[x][y].setEnabled(false);
                }
                    if(flag == 1) {
                        b[x][y].setText("O");
                        c[x][y] = 0;
                        textView.setText("player 1's turn");
                        checkBoard();
                        flag = 0;

                    }
                    if(flag == 0){
                        b[x][y].setText("X");
                        c[x][y] = 1;
                        textView.setText("player 2's turn");
                        checkBoard();
                        flag = 1;
                }
            }
        }

1 个答案:

答案 0 :(得分:0)

替换

if(flag == 0)

else if(flag == 0)

这将使它在将flag设置为0后跳过第二个if语句。

class MyClickListener implements View.OnClickListener {
        int x;
        int y;
        int flag;

        public MyClickListener(int x, int y) {
            this.x = x;
            this.y = y;
            flag = 1;
        }


        public void onClick(View view) {



            if (b[x][y].isEnabled()) {
                b[x][y].setEnabled(false);

                if(flag == 1) {
                    b[x][y].setText("O");
                    c[x][y] = 0;
                    textView.setText("player 1's turn");
                    checkBoard();
                    flag = 0;

                }
                else if(flag == 0){
                    b[x][y].setText("X");
                    c[x][y] = 1;
                    textView.setText("player 2's turn");
                    checkBoard();
                    flag = 1;
               }
            }
        }
    }