- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在学习 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/
我遇到过这个 html: 上面的html和这个有什么区别: 最佳答案 来自MDN page on the tag : 对于 type 的属性标签,可能的值是: 提交:按钮将表单数据提交给服务器
Button button= (Button) findViewbyID(R.id.button); 和 Button button = new Button(this); 有什么区别? 最佳答案 有
我是一名优秀的程序员,十分优秀!