Android Dialog 遇到的問題
阿新 • • 發佈:2018-12-10
Dialog的生成,一般是基於Activity的這個物件,如程式碼:
private void showDialog(){
dialog = new AlertDialog.Builder(this);
dialog.setTitle("Test")
.setMessage("Test will show")
.create().show();
}
但是,有些情況很特殊。比如在Service中,需要彈出彈出對話方塊。此時,如果依然按照基於Activity物件的方式建立,那麼在彈出對話方塊時,將會報:
``` AndroidRuntime: android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application ```
也就是說:對話方塊沒有可以依附的Activity物件。所以不能基於Service物件來建立對話方塊。當然,可以使對話方塊基於全域性。
private void shutdownDialog(){ if (sConfirmDialog != null){ sConfirmDialog.dismiss(); } sConfirmDialog = new AlertDialog.Builder(this/*mContext*/) .setTitle("Power off") .setMessage("Your phone will shutdown") .setPositiveButton("yes", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { } }) .setNegativeButton("no", null) .create(); //sConfirmDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT); sConfirmDialog.getWindow().setType(LayoutParams.TYPE_SYSTEM_ERROR); sConfirmDialog.show(); }
即在 ==show()== 之前,加上
``` sConfirmDialog.getWindow().setType(LayoutParams.xxxxxxx); ```
將對話方塊設定為了系統級別,這樣就不會彈出上面的錯誤提示.