出于学习目的,我在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有关。看到什么了吗