在一个长时间运行的操作中,我使用ProgressDialog
创建了一个弹出对话框来防止其他操作进行。
我使用setCancelable(false)
使其不可取消,所以不能使用返回按钮关闭它,但令人惊讶的是,搜索硬件按钮可以关闭对话框!
更准确地说,全局搜索应用程序被显示出来,当我回到我的应用程序时,对话框已经被关闭。
有什么办法可以防止对话框被关闭吗?
在一个长时间运行的操作中,我使用ProgressDialog
创建了一个弹出对话框来防止其他操作进行。
我使用setCancelable(false)
使其不可取消,所以不能使用返回按钮关闭它,但令人惊讶的是,搜索硬件按钮可以关闭对话框!
更准确地说,全局搜索应用程序被显示出来,当我回到我的应用程序时,对话框已经被关闭。
有什么办法可以防止对话框被关闭吗?
这个可以工作(注意我将其放在对话框生成器上):
.setOnKeyListener(new DialogInterface.OnKeyListener() {
@Override
public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_SEARCH && event.getRepeatCount() == 0) {
return true; // Pretend we processed it
}
return false; // Any other keys are still processed as normal
}
})
也许甚至可以捕获正面和负面的按钮按下事件,仅仅处理这些事件,对于任何其他按键返回true。如果你能够想出来,我会很感兴趣...
PS:我在某个地方读到过对话框中存在更多的“漏洞”,即你可以在不点击任何按钮的情况下将其关闭。这显然就是其中之一。有人知道其他漏洞吗?
@Override
并将onKey的声明更改为public boolean onKey(DialogInterface arg0, int arg1, KeyEvent arg2)
对我有用 - 谢谢! - Mohamed HafezsetCanceledOnTouchOutside(false);
mProgressDialog.setCancelable(false);
对我有用。
您必须通过Activity的onCreateDialog事件创建对话框,因为这是Activity管理它们并在Activity恢复时还原它们的时间点。
用于创建由Activity管理(保存和还原)对话框的回调。如果您使用showDialog(int)
,则Activity将在第一次调用此方法后继续保留它。通过此方法创建的任何对话框都将自动保存和还原,包括它是否正在显示。如果您希望Activity为您管理保存和还原对话框,您应该重写此方法并处理传递给showDialog(int)
的任何ID。如果您想在显示对话框之前准备对话框,请重写onPrepareDialog(int, Dialog)
。
示例用法:
public class MyClass extends Activity {
// ........ //
static final int DATE_DIALOG_ID = 1;
@Override
protected Dialog onCreateDialog(int id) {
switch (id) {
case DATE_DIALOG_ID:
return new DatePickerDialog(this, mDateSetListener, mYear, mMonth,
mDay);
}
return null;
}
public void launchSetDate() {
showDialog(DATE_DIALOG_ID);
}
}
该代码与编程有关。progressDialog.setMessage("请稍等..."); progressDialog.setCancelable(false); progressDialog.show();