Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/204.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android通过对话框传递变量,该对话框在OnCreate中被忽略_Java_Android_Dialog - Fatal编程技术网

Java Android通过对话框传递变量,该对话框在OnCreate中被忽略

Java Android通过对话框传递变量,该对话框在OnCreate中被忽略,java,android,dialog,Java,Android,Dialog,如果您阅读了代码,您可以看到我在对话框后面放置了一条Toast消息。我希望它能够使同一类中声明为public的第一个变量通过对话框的过程最终到达if语句并在if语句中显示Toast消息来获得其值 最初,我有一个名为showDialogHOME的方法,其中传递了以下所有代码。 我想我这样做是为了解决这个问题 此代码位于OnCreate中 final CharSequence[] items = {"X", "O"}; final AlertDialog.Builder alertDial

如果您阅读了代码,您可以看到我在对话框后面放置了一条Toast消息。我希望它能够使同一类中声明为public的第一个变量通过对话框的过程最终到达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();

你不应该用吐司代替原木。从代码的角度来看,日志更易于添加和维护,并且使调试方式更加有效。还有什么是第一?这段代码有点奇怪…首先是一个整数类型的变量。它的使用是为了让玩家可以输入谁先进入电脑==1或玩家先==2,在一个抽签游戏中。日志和祝酒对我来说没那么重要。我希望这是有帮助的。我不明白这是怎么回事。对话框的目的是让第一个变量可以根据用户在对话框中输入的输入获得1或2的值。没错,但在您的代码中,您不会等待用户选择他的输入。这样,只有在用户做出选择后才会显示。好吧,这就是我要问的,或者至少是想问的。如何让代码或程序的其余部分等待用户的输入?是的,我将您的方法放在我的方法之后,并且只尝试在没有OnClickListener的情况下使用OnCancelListener。我认为它不起作用,我希望我没有把一些代码或任何东西放错地方,如果你愿意,我可以给你一个截图或类似的东西。只是,如果您重新编辑代码并添加alertDialog.show,可能会对其他人有所帮助;在底部。