警报对话框中的代码位置如何影响程序顺序?

时间:2019-12-08 11:13:27

标签: java android android-alertdialog

出于学习目的,我在Android Studio中创建了一个tic tac toe应用程序,并且修复了一些奇怪的错误,但是我不知道为什么它现在可以正常工作。它与AlertDialogs有关,我将对其进行解释。

public void showDrawAlarm() {
    AlertDialog.Builder alert = new AlertDialog.Builder(this);
    final AlertDialog closeAlertDialog = alert.create();
    this.isGameFinished = true;
    alert.setTitle("Draw!");
    alert.setCancelable(false);
    alert.setMessage("Nobody has won!");
    alert.setPositiveButton("Restart", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            restart();
        }
    });
    alert.setNegativeButton("Close", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            closeAlertDialog.cancel();
        }
    });
    alert.show();
}

@Override
public void onClick(View view) {
    Button button = (Button) view;
    if (this.isGameFinished == false) {

        if (!(button.getText().length() > 0)) {

            int setXorO = this.turnCount % 2;

            if (setXorO == 1) {
                button.setText("x");
                this.turnCount++;
            } else {
                button.setText("o");
                this.turnCount++;
            }
            if (checkIfEnd("x")) {

                Log.d("checkX", "checkIfEnd x");
                AlertDialog.Builder alert = new AlertDialog.Builder(this);
                final AlertDialog closeAlertDialog = alert.create();
                alert.setTitle("Game Over!");
                alert.setCancelable(false);
                alert.setMessage("X wins!");
                alert.setPositiveButton("Restart", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        restart();
                    }
                });
                alert.setNegativeButton("Close", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        isGameFinished = true;                              //this line is important! 
                        closeAlertDialog.cancel();
                    }
                });
                alert.show();
            }

            if (this.turnCount == 10 && isGameFinished == false) {

                showDrawAlarm();
            }

这是包含该错误的代码。专注于注释行。错误是这样的:如果将我的“ x”放在正在运行的应用程序的最后一圈(当只按下一个块时),则在我按下“关闭”后,将首先显示“ showDrawAlarm()”中的AlertDialog。 ,第二个AlertDialog(“ X胜!”)出现。

isGameFinished变量存在一些问题。它甚至不应该显示DrawAlarm。当我在“ if(checkIfEnd(“ x”)“”之后紧接注释行(” isGameFinished = true“)时,此错误已得到解决。

然后一切正常。但是我真的不知道为什么,这一定与AlertDialogs有关。看到什么了吗

0 个答案:

没有答案