Android 通过在 OnCreate 中绕过的对话框传递变量
Android Passing a variable with a dialog box which gets bypassed in OnCreate
如果您阅读代码,您会发现我在对话框后放置了一条 Toast 消息。我希望它能够使在同一个 class 中声明为 public 的 "First" 变量通过对话框的过程最终到达 if 语句来获取其值,并且最后 在 if 语句中显示 Toast 消息。
最初我有一个名为 "showDialogHOME" 的方法,其中传递了以下所有代码。
我以为我这样尝试,希望能解决问题。
此代码位于 OnCreate()
final CharSequence[] items = {"X", "O"};
final AlertDialog.Builder alertDialog = new AlertDialog.Builder(this);
alertDialog.setCancelable(false);
alertDialog.setTitle("Who goes first?");
alertDialog.setSingleChoiceItems(items, -1, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int item) {
if (items[item] == "X") {
First = 1;
Toast.makeText(getApplication(), "Computer goes first.", Toast.LENGTH_SHORT).show();
} else if (items[item] == "O") {
First = 2;
if (First == 2) {
Toast.makeText(getApplication(), "2 WORKS", Toast.LENGTH_SHORT).show();
}
}
dialog.dismiss();
}
});
alertDialog.show();
if (First == 1){
Toast.makeText(getApplication(), "Inside If", Toast.LENGTH_SHORT).show();
}
Toast.makeText(getApplication(), "After If Message", Toast.LENGTH_SHORT).show();
问题是在您创建并显示 AlertDialog 之后的行不等待并在您设置值之前执行。
您可能想为此使用一个事件:
alertDialog.setOnCancelListener(new OnCancelListener() {
public void onCancel(DialogInterface dialog) {
if (First == 1){
Toast.makeText(getApplication(), "Inside If", Toast.LENGTH_SHORT).show();
}
else
{
Toast.makeText(getApplication(), "After If Message", Toast.LENGTH_SHORT).show();
}
});
编辑
你也可以试试这个:
alertDialog.setSingleChoiceItems(items, -1, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int item) {
if (items[item] == "X") {
First = 1;
//Toast.makeText(getApplication(), "Computer goes first.", Toast.LENGTH_SHORT).show();
} else if (items[item] == "O") {
First = 2;
if (First == 2) {
// Toast.makeText(getApplication(), "2 WORKS", Toast.LENGTH_SHORT).show();
}
}
dialog.dismiss();
if (First == 1) {
Toast.makeText(getApplication(), "Inside If", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(getApplication(), "After If Message", Toast.LENGTH_SHORT).show();
}
}
});
alertDialog.show();
如果您阅读代码,您会发现我在对话框后放置了一条 Toast 消息。我希望它能够使在同一个 class 中声明为 public 的 "First" 变量通过对话框的过程最终到达 if 语句来获取其值,并且最后 在 if 语句中显示 Toast 消息。
最初我有一个名为 "showDialogHOME" 的方法,其中传递了以下所有代码。 我以为我这样尝试,希望能解决问题。
此代码位于 OnCreate()
final CharSequence[] items = {"X", "O"};
final AlertDialog.Builder alertDialog = new AlertDialog.Builder(this);
alertDialog.setCancelable(false);
alertDialog.setTitle("Who goes first?");
alertDialog.setSingleChoiceItems(items, -1, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int item) {
if (items[item] == "X") {
First = 1;
Toast.makeText(getApplication(), "Computer goes first.", Toast.LENGTH_SHORT).show();
} else if (items[item] == "O") {
First = 2;
if (First == 2) {
Toast.makeText(getApplication(), "2 WORKS", Toast.LENGTH_SHORT).show();
}
}
dialog.dismiss();
}
});
alertDialog.show();
if (First == 1){
Toast.makeText(getApplication(), "Inside If", Toast.LENGTH_SHORT).show();
}
Toast.makeText(getApplication(), "After If Message", Toast.LENGTH_SHORT).show();
问题是在您创建并显示 AlertDialog 之后的行不等待并在您设置值之前执行。
您可能想为此使用一个事件:
alertDialog.setOnCancelListener(new OnCancelListener() {
public void onCancel(DialogInterface dialog) {
if (First == 1){
Toast.makeText(getApplication(), "Inside If", Toast.LENGTH_SHORT).show();
}
else
{
Toast.makeText(getApplication(), "After If Message", Toast.LENGTH_SHORT).show();
}
});
编辑 你也可以试试这个:
alertDialog.setSingleChoiceItems(items, -1, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int item) {
if (items[item] == "X") {
First = 1;
//Toast.makeText(getApplication(), "Computer goes first.", Toast.LENGTH_SHORT).show();
} else if (items[item] == "O") {
First = 2;
if (First == 2) {
// Toast.makeText(getApplication(), "2 WORKS", Toast.LENGTH_SHORT).show();
}
}
dialog.dismiss();
if (First == 1) {
Toast.makeText(getApplication(), "Inside If", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(getApplication(), "After If Message", Toast.LENGTH_SHORT).show();
}
}
});
alertDialog.show();