gpt4 book ai didi

Android:Button 的 onClick 方法不是线性处理的?

转载 作者:行者123 更新时间:2023-11-30 04:57:42 26 4
gpt4 key购买 nike

我正在学习 Android 应用程序编码,并认为编写 TicTacToe 代码是个不错的主意。所以我在一个 Activity 中让我有六个线性排列的按钮,点击时会改变它们的颜色,这取决于玩家的回合(橙色或蓝色)。 onClickListener 的 onClick 方法如下:

public void onClick(View v)
{

if(player == 1)
{
((Button)v).setBackgroundColor(getResources().getColor(android.R.color.holo_orange_dark));

}
else
{
((Button)v).setBackgroundColor(getResources().getColor(android.R.color.holo_blue_light));

}

gameControl();
}

gameControl 遵循游戏基础知识:检查玩家是否赢了,是否平局等:


public void gameControl()

if(checkForWin())
{
playerWins(player);
}
else if(round == 9)
{
draw();
}
else
{
if(player == 1)
player = 2;
else
player = 1;
}

round++;
}

我的问题是,如果玩家获胜,即如果单击最后一个赢得游戏的按钮,按钮的颜色将不会改变。相反,playerWins 方法(在 gameControl 中)会在按钮颜色更改之前刷新“游戏区域”。我已经尝试过 Handler.postDelayed 之类的东西,因为看起来整个 onClick 方法都在解决按钮的颜色之前运行,但没有成功。为什么onClick方法不是线性处理的?有没有办法刷新 Activity 什么的?提前致谢...

感谢您的快速回复,以下是请求的方法:

private void playerWins(int player)
{
if(player == 1)
{
player1Points++;
Toast.makeText(this,"Player 1 wins!", Toast.LENGTH_SHORT).show();
updatePointsText();
resetBoard();
round = 1;
}

if(player == 2)
{
player2Points++;
Toast.makeText(this,"Player 2 wins!", Toast.LENGTH_SHORT).show();
updatePointsText();
resetBoard();
round = 1;
}
}

resetBoard 方法:

private void resetBoard()
{
for(int i = 0; i < 3; i++)
{
for(int j = 0; j < 3; j++)
{
buttons[i][j].setBackgroundColor(Color.parseColor("#B0C4DE"));
}
}
}

最佳答案

是的,我猜它发生得很快,这就是你看不到它的原因。你有一些方法:

1- 在某处放置一个刷新按钮,仅在单击时刷新(例如,如果用户知道这将是平局并且他们想在完成之前重新开始,则此选项会很好)。因此,使用此选项,您不会在用户看到更新之前重置。

2- 显示一个 AlertDialog 说“玩家 X 赢了!”当用户按下 OK 时,您将重置电路板。会是这样的

AlertDialog dialog = AlertDialog.Builder(context);
dialog.setTitle("Your title");
dialog.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
resetBoard()
}
});
dialog.setCancellable(false);
dialog.show();

同时检查您是否可以减少一些代码重构,因为您正在重复代码。例如 playerWins() 可以是

private void playerWins(int player){

if(player == 1)
{
player1Points++;
Toast.makeText(this,"Player 1 wins!", Toast.LENGTH_SHORT).show();
}

if(player == 2)
{
player2Points++;
Toast.makeText(this,"Player 2 wins!", Toast.LENGTH_SHORT).show();
}

updatePointsText();
resetBoard();
round = 1;
}

关于Android:Button 的 onClick 方法不是线性处理的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58845717/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com