2011-09-23 49 views
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()在創建對話框後返回空值

回答

3

我面臨同樣的問題,我現在看到getWindow()文件實際上是告訴爲什麼(不是原因,但爲什麼在這個特定的點)。撥打show()後,您可以檢索窗口。

+0

那麼,說如果活動是不可見的,它是。另外,如果我從onPrepareDialog調用相同的方法(initInfoDialog),那麼getWindow()將返回正確的值。從源代碼看來,onPrepareDialog在dialog.show()之前被調用,所以我不知道該怎麼做。 – nagohs

+0

你確定getWindow()返回null嗎?我現在測試了它,即使在'onCreate'中調用'showDialog(0)'時也無法重現。如果我仔細看看你的'initInfoDialog','dialog'變成了不是'null'的地方? – Knickedi

+0

我最終改變了自己的代碼以實現相同的最終目標,所以我不再有這個確切的流程。首先,我不再使用Builder類,我只是通過構造函數自己創建對話框。無論哪種方式,用我當前的代碼,我嘗試在onCreateDialog中放置一個斷點,而dialog.getWindow()不爲null。我不知道該怎麼告訴你,現在看起來很好,但是前幾天我無法避免 - 無論是重新開始,清理還是其他任何事情。現在我正在繼續,但如果我再次運行它,我將創建一個示例項目並重新打開此問題。謝謝您的幫助! – nagohs