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();