我需要使用方法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);
}
}
}
當我打電話從AlertDialog.Builder
create()
或show()
,這些方法得到的回覆是不執行的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