我正在使用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
外部点击但用户点击任何按钮时,我不想避免解雇]
答案 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);
希望这会对你有所帮助。