2010-12-30 15 views
1

カスタムダイアログを作成する際に問題があります。しかし、私は失敗を見つけることはありません。返されたダイアログ== nullの場合、私がチェックカスタムダイアログの作成に関する問題

12-30 19:27:02.593: ERROR/AndroidRuntime(383): android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application 

- しかし、それ:うまくいけば、誰もが...次のエラーで

protected Dialog onCreateDialog(int id) { 
    Dialog dialog = null; 
    switch (id) { 
    case DIALOG_ABOUT_ID: 
     dialog = buildAboutDialog(); 
     break; 
    default: 
     dialog = null; 
    } 
    return dialog; 
} 

...

public Dialog buildAboutDialog() { 
    Context mContext = getApplicationContext(); 
    Dialog dialog = new Dialog(mContext); 

    dialog.setContentView(R.layout.about_dialog); 
    dialog.setTitle("About this application"); 

    return dialog; 
} 

結果を私を助けることができますそうではありません。

Iはまた、第二の方法(インフレータ)を試みた私はダイアログが

Dialog dialog = new Dialog(this); 

なく

Context mContext = getApplicationContext(); 
Dialog dialog = new Dialog(mContext); 

Iドンを使用して作成する必要があること、を見出しhttp://developer.android.com/guide/topics/ui/dialogs.html#CustomDialog

答えて

3

に記載なぜ正確に知りません。おそらく誰も私にそれを説明することができますか?

+3

ダイアログはアプリケーションではなくアクティビティに関連付けられている必要があるためです。 – rf43

+0

ボタンをクリックした後でダイアログを表示したいのですが? "this"はOnClickListenerを参照していますが、アクティビティではありません。 – ffleandro

+0

残念ながら、これをカスタムダイアログを作成する際のGoogleコードには、getApplicationContextがありません... http://developer.android.com/guide/topics/ui /dialogs.html#CustomDialog – JPM

1

ダイアログダイアログ=新規ダイアログ(contex); dialog.setContentView(R.layout.help_content);

これは私のために働く..あなたのメインクラスのコンテキストを取得しないgetapplicationcontextかもしれません。

0

明らかに、アクティビティのコンテキストは、getApplicationContext()によって返されるオブジェクトとは異なります。これは、ロギングを使用してチェックすることができ、ActivityName.thisとgetApplicationContextを出力するだけです。

getApplicationContextによって返されるオブジェクトはグローバルなものですが、アクティビティのコンテキストはそのアクティビティだけに属します。

Log.e(tag,""+ getApplicationContext()); 
Log.e(tag,""+CustomDialogActivity.this); 

ここで、CustomDialogActivityは私のダイアログを表示する私のアクティビティです。

ダイアログはアクティビティのコンテキストを必要とし、getApplicationContext()はそれを提供しません。書かれているように、here(コメントを読む)というコンテキストは、getApplicationContext()のスーパーセットです。ですから、グローバルな文脈ではなく、常に文脈を渡すことは良いことです。

また、このページのffleandroのコメントにお答えするには、onClick()内にいる場合は ActivityNameを使用してアクティビティを参照してください。これが役に立ちますようにお願いします。

関連する問題