单击任何按钮后,ProgressDialog会自动解除

时间:2017-02-10 07:54:10

标签: android progressdialog dismiss

我正在使用ProgressDialog来显示某些下载状态。我添加了两个名为Cancel&的按钮。 Paused

当我点击任何一个按钮时,ProgressDialog被解雇但我需要ProgressDialog不被自动解雇,因为我必须处理其他一些事情。

我的代码是:

ProgressDialog progressDialog;
progressDialog = new ProgressDialog(this);
progressDialog.setTitle("Please Wait..");
progressDialog.setMessage("Downloading");
progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
progressDialog.setMax(100);
progressDialog.setButton(DialogInterface.BUTTON_NEGATIVE, "Cancel", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialogInterface, int i) {
            Toast.makeText(MainActivity.this, "Canceled", Toast.LENGTH_SHORT).show();
        }
    });
progressDialog.setButton(DialogInterface.BUTTON_POSITIVE, "Paused", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialogInterface, int i) {


           // DownloadManager.getInstance().pause(fileUrl);
            Toast.makeText(MainActivity.this, "Paused", Toast.LENGTH_SHORT).show();\
        }
    });

progressDialog.show();

问题出在哪里? [注意:当用户在progressDialog外部点击但用户点击任何按钮时,我不想避免解雇]

3 个答案:

答案 0 :(得分:2)

progressDialog.show()之后获取按钮并设置View.OnClickListener以处理其中的点击次数。

ProgressDialog progressDialog = new ProgressDialog(this);
progressDialog.setTitle("Please Wait..");
progressDialog.setMessage("Downloading");
progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
progressDialog.setMax(100);
progressDialog.setButton(DialogInterface.BUTTON_NEGATIVE, "Cancel",
        (DialogInterface.OnClickListener) null);
progressDialog.setButton(DialogInterface.BUTTON_POSITIVE, "Pause",
        (DialogInterface.OnClickListener) null);
progressDialog.show();

progressDialog.getButton(DialogInterface.BUTTON_NEGATIVE)
        .setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        // Handle "Cancel" button click here
        Toast.makeText(MainActivity.this, "Canceled", Toast.LENGTH_SHORT).show();
    }
});
progressDialog.getButton(DialogInterface.BUTTON_POSITIVE)
        .setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        // Handle "Pause" button click here
        Toast.makeText(MainActivity.this, "Paused", Toast.LENGTH_SHORT).show();
    }
});

答案 1 :(得分:0)

这是ProgressDialog的默认行为。您可以尝试使用ProgressDialog: How to prevent automatic dismissing of Dialog inside setButton-Listener?描述的方法(我不建议这样做)或制作自定义布局。

编辑:

虽然我们正在努力,但我可以建议另一种非正统的做法。

覆盖dismiss()

public class MyProgressDialog extends ProgressDialog {

public boolean close = true;

@Override
public void dismiss() {
    if (close) {
        super.dismiss();
    } else {
        close = true;
    }
}

并在按钮点击中,首先设置为接近false。

请注意,else子句使它成为一次性的事情,以便下次代码的另一部分调用dismiss()它仍然可以工作

答案 2 :(得分:-2)

好的,我找到你......并更新我的答案......

您需要在显示ProgressDialog后设置onClickListener

myDialog = new ProgressDialog(this);

myDialog.setCancelable(false);
myDialog.setCanceledOnTouchOutside(false);

// Create the button but set the listener to a null object.
myDialog.setButton(DialogInterface.BUTTON_NEUTRAL, "start", 
    (DialogInterface.OnClickListener) null )

// Show the dialog so we can then get the button from the view.
myDialog.show();

// Get the button from the view.
Button dialogButton = myDialog.getButton( 
DialogInterface.BUTTON_NEUTRAL );

// Set the onClickListener here, in the view.
dialogButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick ( View view ) {

        if (isPrepared) {
             myDialog.dismiss();

        }

        // Dialog will not get dismissed unless "isPrepared".

    }

});

在点击屏幕上使用setCanceledOnTouchOutside停止对话框dimiss

dialog.setCanceledOnTouchOutside(false);

点击硬件后退按钮

使用setCancelable停止对话框关闭
dialog.setCancelable(false);

希望这会对你有所帮助。