当我单击搜索按钮时,防止 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)的主要内容,如果未能解决你的问题,请参考以下文章
当我单击带有 selenium 的搜索按钮时,网站会重新加载