Java 如何获得触发这两种方法的按钮?

Java 如何获得触发这两种方法的按钮?,java,android,button,Java,Android,Button,我在Android Studio中创建了这个Tictatcoe游戏,在我的onClick方法中,我会画一个X或O,并检查是否有人赢了。我的问题是,当有人要玩赢棋时,它只执行赢的方法,而不执行画X或O的方法,因此游戏终止,不画最后一个字母 public class button1 extends AppCompatActivity implements View.OnClickListener { private Button[][] buttons = new Button[3][3]; pri

我在Android Studio中创建了这个Tictatcoe游戏,在我的onClick方法中,我会画一个X或O,并检查是否有人赢了。我的问题是,当有人要玩赢棋时,它只执行赢的方法,而不执行画X或O的方法,因此游戏终止,不画最后一个字母

public class button1 extends AppCompatActivity implements View.OnClickListener {
private Button[][] buttons = new Button[3][3];
private boolean player1Turn = true;
private int roundCount =0;
private int player1Points =0;
private int player2Points =0;

private TextView textViewPlayer1;
private TextView textViewPlayer2;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_button1);
    textViewPlayer1 = findViewById(R.id.player1__number_score);
    textViewPlayer2 = findViewById(R.id.player2__number_score);

    for(int i=0; i<3; i++){
        for (int j=0; j<3; j++){
            String buttonID = "button_" + i + j;
            int resID = getResources().getIdentifier(buttonID, "id", getPackageName());
            buttons[i][j] = findViewById(resID);
            buttons[i][j].setOnClickListener(this);
        }
    }
}



@Override
public void onClick(View view){
    if(!((Button) view).getText().toString().equals("")){
        return;
    }
    if(player1Turn) {
        ((Button) view).setText("X");
    }else{
        ((Button) view).setText("O");

    }
    roundCount++;
    if(checkForWin()){
        if(player1Turn){
            player1Wins();
        }
        else{
            player2Wins();
        }
    } else if(roundCount == 9){
        draw();
    }else{
        player1Turn =!player1Turn;
    }

}
private boolean checkForWin(){
    String[][] check = new String[3][3];
    for(int i = 0; i<3; i++){
        for(int j=0; j<3; j++){
            check[i][j] = buttons[i][j].getText().toString();

        }
    }
    for (int i=0; i<3; i++){
        if (check[i][0].equals(check[i][1]) && check[i][0].equals(check[i][2]) && !check[i][0].equals("")){
            return true;
        }

    }
    for (int i=0; i<3; i++){
        if (check[0][i].equals(check[1][i]) && check[0][i].equals(check[2][i]) && !check[0][i].equals("")){
            return true;
        }

    }
    if (check[0][0].equals(check[1][1]) && check[0][0].equals(check[2][2]) && !check[0][0].equals("")){
        return true;
    }
    if (check[0][2].equals(check[1][1]) && check[0][2].equals(check[2][0]) && !check[0][2].equals("")){
        return true;
    }
    return false;
}
private void player1Wins() {
    player1Points++;
    textViewPlayer1.setText(Integer.toString(player1Points));
    Toast.makeText(this,"Player 1 has won",Toast.LENGTH_SHORT).show();
    resetBoard();

}


private void player2Wins(){
    player2Points++;
    textViewPlayer2.setText(Integer.toString(player2Points));
    Toast.makeText(this,"Player 2 has won",Toast.LENGTH_SHORT).show();
    resetBoard();

}
private void resetBoard(){
    try {
        Thread.sleep(1000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    for(int i=0;i<3;i++){
        for(int j=0; j<3; j++){
            buttons[i][j].setText("");
        }
    }
    roundCount =0;
}
private void draw(){
    Toast.makeText(this,"Draw",Toast.LENGTH_SHORT).show();
    resetBoard();


}
public类按钮1扩展AppCompatActivity实现View.OnClickListener{
私有按钮[][]按钮=新按钮[3][3];
私有布尔player1Turn=true;
私有整数roundCount=0;
私人整数播放器1点=0;
私人整数播放器2点=0;
私有文本视图文本视图播放器1;
私有文本视图文本视图播放器2;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_按钮1);
textViewPlayer1=findViewById(R.id.player1\u编号\u分数);
textViewPlayer2=findViewById(R.id.player2\u编号\u分数);

对于(int i=0;i调用
draw()
直接位于
if(checkForWin()){
?请添加
checkForWin()
code到您的问题中我已将代码添加到问题中。我认为问题在于,在按下最后一个按钮后,resetBoard方法会首先触发,因此不会绘制最后一个字符。您是否可以尝试使用Handler.postDelayed()延迟调用resetBoard()方法方法。@Vikrant\u Dev非常感谢!它工作得非常好,现在我只需禁用所有按钮。您能简要说明一下您的解决方案是如何工作的吗?为什么不在我按下按钮时等待延迟,而不是在按下按钮后等待?在
if(checkForWin())之后直接调用
draw()
{
?请将
checkForWin()
代码添加到您的问题中我已将代码添加到问题中。我认为问题在于,在按下最后一个按钮后,resetBoard方法首先触发,因此它不会绘制最后一个字符。您是否可以尝试使用Handler.postDelayed()延迟调用resetBoard()方法方法。@Vikrant_Dev非常感谢!它工作得很好,现在我只需禁用所有按钮按下。您能简要解释一下您的解决方案是如何工作的吗?为什么不在我按下按钮时等待延迟,而不是在按下按钮后等待?