Предотвращение отклонения ProgressDialog при нажатии кнопки поиска (Android)

В долгосрочной перспективе я показываю всплывающее диалоговое окно (созданное из ProgressDialog для предотвращения других операций).

Я сделал его не отмененным с помощью setCancelable(false) , поэтому я не могу закрыть его с помощью кнопки «Назад», но удивительно, что кнопка «Поиск» отвергает диалог!

Точнее, отображается глобальное приложение поиска, и когда я вернусь в свое приложение, диалог будет отклонен.

Любая идея, как предотвратить отклонение диалога?

Solutions Collecting From Web of "Предотвращение отклонения ProgressDialog при нажатии кнопки поиска (Android)"

Это работает (обратите внимание, что я помещал его в построитель диалогового окна):

 .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: Я читал где-то в диалоговом окне больше «дыр», т. Е. Вы можете избавиться от него, не нажимая на него никаких кнопок. Это, по-видимому, одно. Кто-нибудь знает о других?

 setCanceledOnTouchOutside(false); 

mProgressDialog.setCancelable(false); Работал на меня.

Вы должны создавать свои диалоги через событие Activity onCreateDialog , так как это то место, где они управляются Activity, и они будут восстановлены при возобновлении действия.

Обратный вызов для создания диалогов, которые управляются (сохраняются и восстанавливаются) для вас по активности. Если вы используете showDialog(int) , то в первый раз эта showDialog(int) вызовет этот метод и затем будет навешиваться на него. Любой диалог, созданный этим методом, будет автоматически сохранен и восстановлен для вас, в том числе, будет ли он отображаться. Если вы хотите, чтобы активность управляла диалоговыми окнами сохранения и восстановления, вы должны переопределить этот метод и обработать любые идентификаторы, переданные showDialog (int). Если вам onPrepareDialog(int, Dialog) возможность подготовить свое диалоговое окно до его отображения, переопределите 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); } }