单击搜索按钮(Android)时阻止ProgressDialog被解雇

时间:2010-03-23 18:10:44

标签: android dialog progressdialog

在长时间运行的操作中,我正在显示一个弹出对话框(从ProgressDialog创建以防止其他操作发生)。

我使用setCancelable(false)使其无法取消,因此我无法使用后退按钮关闭它,但令人惊讶的是,搜索硬件按钮会取消对话框!

更确切地说,显示全局搜索应用程序,当我回到我的应用程序时,对话框已被解除。

知道如何防止对话被解雇吗?

4 个答案:

答案 0 :(得分:45)

这有效(注意我把它放在对话框构建器上):

.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:我在某个地方读到了对话框中有更多的“漏洞”,即你可以摆脱它而不用敲击它上面的任何按钮。这显然是一个。有人知道其他人吗?

答案 1 :(得分:35)

setCanceledOnTouchOutside(false);

答案 2 :(得分:4)

mProgressDialog.setCancelable(false);为我工作。

答案 3 :(得分:1)

您必须通过活动的onCreateDialog事件创建对话框,因为这是活动管理的对象,并且在活动恢复时将恢复它们。

回调创建活动管理(保存和恢复)的对话框。如果您使用showDialog(int),活动将首次调用此方法,然后挂起。将自动保存并恢复此方法创建的任何对话框,包括是否显示。如果您希望活动为您管理保存和恢复对话框,则应覆盖此方法并处理传递给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);
 }
}