代码之家  ›  专栏  ›  技术社区  ›  diningphil

无法关闭Android ProgressDialog

  •  0
  • diningphil  · 技术社区  · 9 年前

    我有一个名为的静态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)解决了,但我仍然无法关闭对话框。 有什么想法吗?

    4 回复  |  直到 9 年前
        1
  •  1
  •   Harish Vats    9 年前

    关闭对话框添加 dialog.dismiss(); 语句之后 joinGroup(groupName);

        .setPositiveButton(
        "Yes", new DialogInterface.OnClickListener()
         {
                 public void onClick(DialogInterface dialog, int id) {
                            //join group
                            joinGroup(groupName);
    
                           // Add this line
                            dialog.dismiss();          
                  }
         })
    

    相同的 设置否定按钮

    这将关闭对话框。

        2
  •  0
  •   ArbenMaloku    9 年前

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

    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
    
    
    }
    

    希望这对你有所帮助。

        3
  •  0
  •   Biswajit    9 年前

    如果您正在询问alertDialog,请尝试以下操作:

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

    希望这对您有所帮助:)

        4
  •  0
  •   diningphil    9 年前

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

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

    具有

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

    这样,随后

    dialog.dismiss()
    

    按预期工作。谢谢你的建议。