Подтвердить что ты не робот

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

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

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

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

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

4b9b3361

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

Ответ 2

setCanceledOnTouchOutside(false);

Ответ 3

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

Ответ 4

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

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