Мне нужно использовать метод onWindowFocusChange()
, чтобы закрыть диалоговые окна системы в AlertDialog
, поэтому я решил расширить AlertDialog
и реализовать этот метод.Как реализовать метод onWindowFocusChange() в диалоге (Android)
public class MyAlertDialog extends AlertDialog {
private Context context;
protected MyAlertDialog(Context context) {
super(context);
this.context = context;
}
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
if (!hasFocus) {
Intent closeDialogs = new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
context.sendBroadcast(closeDialogs);
}
}
}
Когда я взываю к create()
или show()
из AlertDialog.Builder
, эти методы получают СПИНКИ AlertDialog
но не MyAlertDialog
объекта и onWindowsFocusChanged()
не выполняются. Очевидно, я не могу отличить AlertDialog
до MyAlertDialog
.
AlertDialog dialog = new MyAlertDialog(this);
MyAlertDialog.Builder builder = new MyAlertDialog.Builder(this);
builder.setMessage(...);
builder.setCancelable(false);
builder.setNeutralButton(...)
builder.show(); // Returns AlertDialog
// dialog = builder.show(); -> dialog doesn't execute onWindowsFocusChanged()
// dialog = (MyAlertDialog) builder.show() -> Not allowed (ClassCastException)
Итак, как я могу создать и показать MyAlertDialog
или другой способ закрыть системные диалоги, когда Dialog
показывает? Я искал информацию, но ничего не нашел.
Заранее спасибо.
Спасибо за ваш ответ! Он отвечает на мой вопрос, и он должен работать. Однако я расскажу вам, как я это решил: когда действие теряет фокус (отображается диалоговое окно, меню с подменю, показанное на панели действий и т. Д.) В методе 'onWindowFocusChanged()' Я запускаю службу с помощью поток, который запускается каждые 300 миллисекунд, чтобы закрыть диалоговые окна системы. Служба (и поток) останавливается, когда активность снова получает фокус в методе 'onWindowFocusChanged(). Таким образом, системные диалоги никогда не отображаются. – jelogar