在长时间运行的操作中,我显示了一个弹出对话框(创建自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:我在某处读到对话框中有更多“漏洞”,即您可以在不点击任何按钮的情况下摆脱它。这显然是一个。有人知道其他人吗?
setCanceledOnTouchOutside(false);
mProgressDialog.setCancelable(false);
为我工作。
您必须通过 Activity 的onCreateDialog事件来创建对话框,因为这是它们由 Activity 管理的点,并且它们将在 Activity 恢复时恢复。
用于创建由活动为您管理(保存和恢复)的对话框的回调。如果您使用showDialog(int)
,则活动将第一次调用此方法,然后将其挂起。通过此方法创建的任何对话框都将自动为您保存和恢复,包括它是否正在显示。如果您希望 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);
}
}