Предотвращение отклонения ProgressDialog при нажатии кнопки поиска (Android)
В долгосрочной перспективе я показываю всплывающее диалоговое окно (созданное из ProgressDialog
, чтобы предотвратить другие операции).
Я отключил его с помощью setCancelable(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: Я читал где-то в диалоговом окне больше "дыр", то есть вы можете избавиться от него, не нажимая на него никаких кнопок. Это, по-видимому, одно. Кто-нибудь знает о других?
Ответ 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);
}
}