无法关闭 Android ProgressDialog

Cannot dismiss Android ProgressDialog

我的 class

中有一个名为 dialog 的静态 ProgressDialog 对象
dialog = new ProgressDialog(this);

这段代码被执行

buildGroupAccessDialog(groupName); dialog.show(c, "Joining", "Please wait...");

涉及的方法有这些

private void builGroupAccessDialog(final String groupName){
    AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
    // set title
    alertDialogBuilder.setTitle("Join group");

    // set dialog message
    alertDialogBuilder
            .setMessage("Do you want to join " + groupName + "  ?")
            .setCancelable(false)
            .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                    //join group
                    joinGroup(groupName);
                }
            })
            .setNegativeButton("No", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                }
            }).create()
            .show();

}

joinGroup() 被调用:

private void joinGroup(final String groupName) {
    Log.d("TRY TO JOIN GROUP:", groupName);


    new Thread(new Runnable() {
        @Override
        public void run() {
            //Get the device
            WifiP2pDevice dev = mRecyclerViewFragment.getDeviceMap().get(groupName);

            WifiP2pConfig config = new WifiP2pConfig();

            config.deviceAddress = dev.deviceAddress;


            wifip2pManager.connect(wifiDirectChannel, config, new WifiP2pManager.ActionListener() {

                @Override
                public void onSuccess() {
                    Log.d("CONNECT", "SUCCESS");

                    // This is used for avoiding registering another BroadcastListener on purpose, keeping only one but responding
                    // to intent only when I'm sure I want it
                    iWantToConnect = true;

                    // Hide progress dialog
                    dialog.dismiss();
                }

                @Override
                public void onFailure(int reason) {

                    Log.d("CONNECT", "FAILURE");

                    //Toast.makeText(getApplication(), "PIPPO", Toast.LENGTH_LONG);
                }
            });

        }
    }).start();

}

我有两个问题:

请注意,我说的是 对话框 变量

1) 进度对话框在不等待用户 AlertDialog 响应的情况下启动(如何使其同步?)

2) 进度对话框未关闭(为什么?)

谢谢

编辑: 我以这种方式更改了我的代码:

buildGroupAccessDialog(groupName);

和:

private void joinGroup(final String groupName) {
    Log.d("TRY TO JOIN GROUP:", groupName);

    dialog.show(this, "Joining", "Please wait...");

    new Thread(new Runnable() {
        @Override
        public void run() {
            //Get the device
            WifiP2pDevice dev = mRecyclerViewFragment.getDeviceMap().get(groupName);

            WifiP2pConfig config = new WifiP2pConfig();

            config.deviceAddress = dev.deviceAddress;


            wifip2pManager.connect(wifiDirectChannel, config, new WifiP2pManager.ActionListener() {

                @Override
                public void onSuccess() {
                    Log.d("CONNECT", "SUCCESS");

                    // This is used for avoiding registering another BroadcastListener on purpose, keeping only one but responding
                    // to intent only when I'm sure I want it
                    iWantToConnect = true;


                    // Togli il dialog di progress
                    dialog.dismiss();


                }

                @Override
                public void onFailure(int reason) {

                    Log.d("CONNECT", "FAILURE");

                    //Toast.makeText(getApplication(), "PIPPO", Toast.LENGTH_LONG);

                    // Togli il dialog di progress
                    //dialog.dismiss();

                    // show failure to the user VANNO MESSI NEL BROIASCASTRECEIVER

                    // refresh peer list
                }
            });

        }
    }).start();
}

private void buildGroupAccessDialog(final String groupName) {

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

    // set title
    alertDialogBuilder.setTitle("Join group");

    // set dialog message
    alertDialogBuilder
            .setMessage("Do you want to join " + groupName + "  ?")
            .setCancelable(false)
            .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                    //join group
                    joinGroup(groupName);
                }
            })
            .setNegativeButton("No", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                }
            }).create()
            .show();
}

现在问题 1) 已解决,但我仍然无法关闭对话框。 有什么想法吗?

你必须像这样在外面声明你的对话框:

AlertDialog dialog;

private void builGroupAccessDialog(final String groupName){
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
// set title
alertDialogBuilder.setTitle("Join group");

// set dialog message
alertDialogBuilder
        .setMessage("Do you want to join " + groupName + "  ?")
        .setCancelable(false)
        .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int id) {
                //join group
                dialog.show() //Show dialog here
                joinGroup(groupName);
            }
        })
        .setNegativeButton("No", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int id) {
            }
        });

 dialog = alertDialogBuilder.create(); //Changed here


}

希望对您有所帮助。

要关闭对话框,请在 joinGroup(groupName);

之后添加 dialog.dismiss(); 语句
    .setPositiveButton(
    "Yes", new DialogInterface.OnClickListener()
     {
             public void onClick(DialogInterface dialog, int id) {
                        //join group
                        joinGroup(groupName);

                       // Add this line
                        dialog.dismiss();          
              }
     })

setNegativeButton

相同

这将关闭您的对话框。

如果您询问有关 alertDialog 的信息,请尝试以下操作:

.setNegativeButton("No", new DialogInterface.OnClickListener() {
   public void onClick(DialogInterface dialog, int id) {
     alertDialogBuilder.dismiss();
   }
});

希望对您有所帮助:)

我终于解决了问题;查看 ProgressDialog 参考,我注意到 show 是一个静态方法。所以我更换了

dialog = new ProgressDialog(this)
dialog.show(c, "Joining", "Please wait...");

dialog = ProgressDialog.show(this,"Joining", "Please wait...", false, true);

这样后续

dialog.dismiss()

按预期工作。感谢您的所有建议。