2011-09-23 12 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()はダイアログが作成された後にnullを返します

答えて

3

私は同じ問題に直面しましたが、今ではgetWindow()というドキュメントが実際に理由を説明するのではなく、なぜこの特定の時点で伝えているのかを見ています。 show()を呼び出した後、ウィンドウを取得できます。

+0

アクティビティが表示されていない場合はそれが表示されます。また、同じメソッド(initInfoDialog)をonPrepareDialogから呼び出すと、getWindow()は正しい値を返します。ソースを見ると、onPrepareDialogはdialog.show()より前に呼び出されているので、何を作るべきか分かりません。 – nagohs

+0

'getWindow()'は 'null'を返しますか?私は今それをテストし、 'onCreate'で' showDialog(0) 'を呼んでも再現できません。あなたの 'initInfoDialog'を詳しく見てみると、' dialog'は 'null'にならないのでしょうか? – Knickedi

+0

私は同じ目標を達成するために少しでもコードを変更してしまったので、私はもはやこの正確な流れを持っていません。 1つは、私はもはやBuilderクラスを使用していない、私はちょうどコンストラクタを介して自分自身をダイアログを作成しています。いずれにしても、私の現在のコードでは、onCreateDialogにブレークポイントを入れようとしましたが、dialog.getWindow()はnullではありませんでした。私はあなたに何を伝えるべきか分かりませんが、今は大丈夫ですが、先日、それを避けることができませんでした。今のところ私は進んでいますが、私が再びそれを実行すると、私はサンプルプロジェクトを作成し、この質問を再開します。助けてくれてありがとう! – nagohs

関連する問題