当我点击searchbutton(Android)时阻止ProgressDialog被解散

在长时间运行中,我显示一个popup对话框(由ProgressDialog创build,以防止其他操作发生)。

我用setCancelable(false)取消了它,所以我不能用后退buttonclosures它,但是令人惊讶的是,Search硬件buttonclosures了对话框!

更确切地说,全球search应用程序显示,当我回到我的应用程序,对话框已被解雇。

任何想法如何防止对话被解雇?

这工作(通知我把它放在对话框生成器):

 .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 } }) 

也许甚至可以抓住正面和负面的button, 处理这些button,返回任何其他键。 如果你能弄明白的话会好奇的

PS:我读过对话框里有更多的“漏洞”,也就是说你可以在没有任何button的情况下摆脱它。 这显然是一个。 有人知道其他人吗?

 setCanceledOnTouchOutside(false); 

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

您必须通过Activity的onCreateDialog事件创build对话框,因为这是由Activitypipe理的点,并且在活动恢复时将被恢复。

callback创build由该活动pipe理(保存和恢复)的对话框。 如果你使用showDialog(int) ,活动将首次调用这个方法,然后挂在它上面。 此方法创build的任何对话框将自动保存并为您恢复,包括是否显示。 如果您希望该活动为您pipe理保存和恢复对话框,则应该重写此方法并处理传递给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); } }