如何从另一种方法取消 AlertDialogue?

How to Cancel a AlertDialogue from another method?

我有一个警报对话框,我希望它可以通过可运行的方法访问。目标是一旦达到某个标准就取消对话框。

下面是创建 AlertDialogue 的代码:

public void perm_dialogue()
{
    final WifiManager wifiManager = (WifiManager)getApplicationContext().getSystemService(Context.WIFI_SERVICE);
    LayoutInflater li = LayoutInflater.from(context);
    View promptsView = li.inflate(R.layout.permission_wifi, null);

    perm_prog = (ProgressBar)promptsView.findViewById(R.id.perm_progressBar);
    perm_text = (TextView)promptsView.findViewById(R.id.perm_text);

    AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
            context);

    // set prompts.xml to alertdialog builder
    alertDialogBuilder.setView(promptsView);
    // set dialog message
    alertDialogBuilder
            .setCancelable(false)
            .setPositiveButton("OK",
                    new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int id) {

                            wifiManager.setWifiEnabled(true);
                            //call the delay function
                            handler1.post(DelayTask);

                        }
                    })
            .setNegativeButton("Cancel",
                    new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int id) {
                            dialog.cancel();
                        }
                    });

    // create alert dialog
    AlertDialog alertDialog = alertDialogBuilder.create();

    // show it
    alertDialog.show();

    perm_prog.setVisibility(promptsView.INVISIBLE);
}

现在这是我用来制作 Runnable 的代码:

public Runnable DelayTask = new Runnable()
{

    @Override
    public void run()
    {
        final WifiManager wifiManager = (WifiManager)getApplicationContext().getSystemService(Context.WIFI_SERVICE);
        //scanning loop for 10 secs
        if(wifiManager.isWifiEnabled()==true)
        {
            //process
            perm_prog.setVisibility(View.INVISIBLE);
            //Close Alert Dialogue


            //stopHandler();
            handler1.removeCallbacks(this);
            return;

        }
        else if(k==40)
        {

            //stopHandler();

            handler1.removeCallbacks(this);
            return;

        }
        else
        {
            perm_prog.setVisibility(View.VISIBLE);
            perm_text.setText("Please Wait...");
        }
        k++;
        handler1.postDelayed(DelayTask, 250);
    }
};

现在在runnable中,我放置了一个Comment标签,指出我要调用AlertDialogue的取消函数的地方。

任何建议都会有所帮助! 谢谢!

您可以将 alertDialog 保留为全局变量,然后在有注释标记的地方调用 alertDialog.dismiss()。

尝试如下将AlertDialog作为成员变量

class MyActivity extends Activity{
    AlertDialog alertDialog=null;
    onCreate(-){
     }
}

并按如下方式创建对话框

 // create alert dialog
alertDialog = alertDialogBuilder.create();

然后在 activity 中的任意位置调用 dismiss() 作为

alertDialog.dismiss();

希望对您有所帮助。