当我单击搜索按钮时,防止 ProgressDialog 被关闭(Android)

Posted

技术标签:

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

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

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

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

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

【问题讨论】:

覆盖搜索按钮功能怎么样? @Override public boolean onSearchRequested() return true; 令人惊讶的是,这不起作用(至少在 2.3 上测试它)。如果你返回 false 也不起作用。 【参考方案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);
 

【讨论】:

我试过了,当我按下搜索按钮时,对话框仍然消失。 当你回到应用程序时? 进度对话框不再存在 :(

以上是关于当我单击搜索按钮时,防止 ProgressDialog 被关闭(Android)的主要内容,如果未能解决你的问题,请参考以下文章

点击返回按钮时防止重新提交表单

单击按钮时防止jquery ui打开第二个对话框

状态变化时如何防止 useQuery 运行?

当我单击带有 selenium 的搜索按钮时,网站会重新加载

当我在 DataGridView 中单击搜索数据按钮时,它会在 DataGridView 中添加我想要搜索的内容

单击文本字段时防止表单向上滚动