java - 有没有办法“获取”从警报对话框中按下的任何内容并更改其他内容的值?
问题描述
我正在学习 Android Studio,我必须创建一个井字游戏程序。游戏本身运行良好,但是,我还需要获取用户输入来询问谁先走以及先走的人想要成为哪种颜色(在红色或黑色等两种颜色之间)。
我已经浏览了 AlertDialogs 的文档,但我只是不知道如何用外行的话来做类似的事情:
if (alert.getButtonPressed() == "X") {
firstLetter == "X"
}
else {
firstLetter == "O"
}
这不是我所知道的样子,但我只是想帮助大家理解我在这里要做的事情。我也需要它来做类似的事情,但不是设置第一个字母,或者谁先到 X/O,我还需要根据谁先想成为 X/O 来设置颜色。
我将发布的代码不是完整的程序,但我希望它可以为您提供足够的重要内容,以帮助您了解程序的整体外观。代码比我展示的要多得多,而且游戏运行正常,我想添加选择谁先走的功能,X 或 O,以及先走的人的颜色。我并没有以任何方式乞求某人为我做这件事,我只是想知道在我的程序的上下文中是否可以从 AlertDialog 中获取用户按下的任何内容,然后更改哪个字母在前,那个字母的颜色是什么。
如果需要发布更多代码,请告诉我。我真的尽量不让自己听起来像一个大学生,正在寻找一个人来解决我所有的问题,然后把答案交给我,所以如果我这样做了,我向你道歉,我向你保证不是这样的。我完全愿意并准备好编辑和更改这篇文章,以帮助我理解这一点。
@Override
protected void onCreate( Bundle savedInstanceState ) {
super.onCreate( savedInstanceState );
game = new TicTacToe( );
Point size = new Point( );
getWindowManager().getDefaultDisplay( ).getSize( size );
int w = size.x / TicTacToe.SIDE;
ButtonHandler bh = new ButtonHandler( );
tttView = new ButtonGridAndTextView( this, w, TicTacToe.SIDE, bh );
tttView.setStatusText( game.result( ) );
setContentView( tttView );
}
private class ButtonHandler implements View.OnClickListener { //this is the buttonhandler to put an X/O
public void onClick( View v ) {
for( int row = 0; row < TicTacToe.SIDE; row++ ) {
for( int column = 0; column < TicTacToe.SIDE; column++ ) {
if( tttView.isButton( ( Button ) v, row, column ) ) {
int play = game.play( row, column );
if( play == 1 )
tttView.setButtonText( row, column, "O" );
else if( play == 2 )
tttView.setButtonText( row, column, "X" );
if( game.isGameOver( ) ) {
tttView.setStatusBackgroundColor( Color.RED );
tttView.enableButtons( false );
tttView.setStatusText( game.result( ) );
showNewGameDialog( ); // offer to play again
}
}
}
}
}
}
}
//Next bit of code is from my TicTacToe.java class
public int play( int row, int col ) {
int currentTurn = turn;
if( row >= 0 && col >= 0 && row < SIDE && col < SIDE
&& game[row][col] == 0 ) {
game[row][col] = turn;
if( turn == 1 )
turn = 2;
else
turn = 1;
return currentTurn;
}
else
return 0;
}
解决方案
//尝试这个
String[] YOURCHOICE = {"X", "O"};
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Choose your action!");
builder.setItems(YOURCHOICE, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if(which == 0){
//Do Some X function
}else if(which == 1){
//Do Some O function
}
}
});
builder.show();
推荐阅读
- javascript - 全局变量在 forEach 循环体内显示为“意外标识符”
- algorithm - 具有恒定时间增加键操作的最小优先级队列
- machine-learning - 深度强化学习——如何处理动作空间中的边界
- .net - 为什么 PowerShell 中的 ScriptBlock 会延迟输出,直到 ScriptBlock 完成?
- javascript - 我如何将下载链接插入到 image2 中,或者如何将其放入下载按钮中?
- excel - 打开带有变量的工作簿时出现错误 438
- javascript - 如何将 Jasmine 设置添加到“独立”Jasmine 设置(使用 SpecRunner.html 的设置)
- javascript - 如何在部分可滚动的表格上使用 div 滚动?
- ios - 来自 ipad 上 tableViewCell 弹出框的 Sharesheet
- c - C 终端中的颜色 (Windows)