4
@Override
protected Dialog onCreateDialog(int id) {
Dialog dialog = null;
switch(id) {
case DIALOG_ID:
LayoutInflater inflater = getLayoutInflater();
View InfoLayout = inflater.inflate(R.layout.info_dialog, null);
AlertDialog.Builder b = new AlertDialog.Builder(MyActivity.this)
.setView(InfoLayout);
initInfoDialog(dialog);
return dialog;
...
private void initInfoDialog(Dialog dialog) {
//this line has the null pointer
WindowManager.LayoutParams lp = dialog.getWindow().getAttributes();
爲什麼dialog.getWindow()在這種情況下返回null?dialog.getWindow()在創建對話框後返回空值
那麼,說如果活動是不可見的,它是。另外,如果我從onPrepareDialog調用相同的方法(initInfoDialog),那麼getWindow()將返回正確的值。從源代碼看來,onPrepareDialog在dialog.show()之前被調用,所以我不知道該怎麼做。 – nagohs
你確定getWindow()返回null嗎?我現在測試了它,即使在'onCreate'中調用'showDialog(0)'時也無法重現。如果我仔細看看你的'initInfoDialog','dialog'變成了不是'null'的地方? – Knickedi
我最終改變了自己的代碼以實現相同的最終目標,所以我不再有這個確切的流程。首先,我不再使用Builder類,我只是通過構造函數自己創建對話框。無論哪種方式,用我當前的代碼,我嘗試在onCreateDialog中放置一個斷點,而dialog.getWindow()不爲null。我不知道該怎麼告訴你,現在看起來很好,但是前幾天我無法避免 - 無論是重新開始,清理還是其他任何事情。現在我正在繼續,但如果我再次運行它,我將創建一個示例項目並重新打開此問題。謝謝您的幫助! – nagohs