【问题标题】:Prevent ProgressDialog from being dismissed when I click the search button (Android)当我单击搜索按钮时,防止 ProgressDialog 被关闭(Android)
【发布时间】:2011-01-30 22:34:27
【问题描述】:

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

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

更准确地说,显示了全局搜索应用程序,当我回到我的应用程序时,对话框已被关闭。

知道如何防止对话框被关闭吗?

【问题讨论】:

  • 覆盖搜索按钮功能怎么样? @Override public boolean onSearchRequested() { return true; }
  • 令人惊讶的是,这不起作用(至少在 2.3 上测试它)。如果你返回 false 也不起作用。

标签: android dialog progressdialog


【解决方案1】:

这行得通(注意我把它放在对话框生成器上):

.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) 对我有用 - 谢谢!
  • @MohamedHafez 可能会更改您的编译器/IDE 以检查 Java 1.6 而不是 1.5?
  • @QQQuestions 知道为什么 getRepeatCount() == 0 必须存在吗?
【解决方案2】:
setCanceledOnTouchOutside(false);

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      您必须通过 Activity 的 onCreateDialog 事件创建对话框,因为这是由 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);
       }
      }
      

      【讨论】:

      • 我试过了,当我按下搜索按钮时,对话框仍然消失。
      • 当你回到应用程序时?
      • 进度对话框不再存在 :(
      猜你喜欢
      • 2012-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-22
      • 1970-01-01
      • 2021-11-24
      • 2022-01-06
      相关资源
      最近更新 更多