单击任何按钮后 ProgressDialog 自动关闭
ProgressDialog is automatically dismissing after clicking any button
我正在使用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
之外但在用户单击任何按钮时避免关闭]
好的,我明白了……并更新我的答案……
您需要在 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
在点击屏幕的任意位置停止对话框关闭
dialog.setCanceledOnTouchOutside(false);
使用 setCancelable
在单击硬件后退按钮时关闭对话框
dialog.setCancelable(false);
希望对您有所帮助。
这是 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;
}
}
在您的按钮点击中,首先将 close 设置为 false。
请注意,else 子句使其成为一次性的事情,以便下次代码的另一部分调用时 dismiss()
它仍然有效
在 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();
}
});
我正在使用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
之外但在用户单击任何按钮时避免关闭]
好的,我明白了……并更新我的答案……
您需要在 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
在点击屏幕的任意位置停止对话框关闭
dialog.setCanceledOnTouchOutside(false);
使用 setCancelable
在单击硬件后退按钮时关闭对话框
dialog.setCancelable(false);
希望对您有所帮助。
这是 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;
}
}
在您的按钮点击中,首先将 close 设置为 false。
请注意,else 子句使其成为一次性的事情,以便下次代码的另一部分调用时 dismiss()
它仍然有效
在 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();
}
});