2010-03-04 10 views
4

J'implémente une boîte de dialogue personnalisée pour former un écran général avec un aspect simple (qui peut devenir plus complexe une fois que je l'ai fait fonctionner). J'ai une mise en page xml qui charge du texte et une icône de R. Cependant, quand showDialog (int) est appelé, j'obtiens une force proche.Boîte de dialogue personnalisée Android fermer

J'ai suivi les instructions que par le guide dev: http://developer.android.com/intl/de/guide/topics/ui/dialogs.html

Code

se présente comme suit:

@Override 
protected Dialog onCreateDialog(int id) { 
    Dialog dialog; 
     switch(id) { 
     case DIAG_ABOUT: 
     dialog = new Dialog(getApplicationContext()); 
     dialog.setContentView(R.layout.aboutdialog); 
     dialog.setTitle(R.string.about_title); 
     dialog.setOwnerActivity(this); 
     break; 
     default: 
      dialog = null; 
     } 
     return dialog; 
} 

DIAG_ABOUT est défini comme private static final int DIAG_ABOUT = 0;

Le chat Log montre la trace suivante:

03-04 11:37:08.760: ERROR/AndroidRuntime(726): Uncaught handler: thread main exiting due to uncaught exception 
03-04 11:37:08.780: ERROR/AndroidRuntime(726): android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application 
03-04 11:37:08.780: ERROR/AndroidRuntime(726):  at android.view.ViewRoot.setView(ViewRoot.java:429) 
03-04 11:37:08.780: ERROR/AndroidRuntime(726):  at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:178) 
03-04 11:37:08.780: ERROR/AndroidRuntime(726):  at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91) 
03-04 11:37:08.780: ERROR/AndroidRuntime(726):  at android.app.Dialog.show(Dialog.java:231) 
03-04 11:37:08.780: ERROR/AndroidRuntime(726):  at android.app.Activity.showDialog(Activity.java:2407) 
03-04 11:37:08.780: ERROR/AndroidRuntime(726):  at uk.me.cpearson.runningLate.Home.onOptionsItemSelected(Home.java:143) 
03-04 11:37:08.780: ERROR/AndroidRuntime(726):  at android.app.Activity.onMenuItemSelected(Activity.java:2085) 
03-04 11:37:08.780: ERROR/AndroidRuntime(726):  at com.android.internal.policy.impl.PhoneWindow.onMenuItemSelected(PhoneWindow.java:820) 
03-04 11:37:08.780: ERROR/AndroidRuntime(726):  at com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:139) 
03-04 11:37:08.780: ERROR/AndroidRuntime(726):  at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:813) 
03-04 11:37:08.780: ERROR/AndroidRuntime(726):  at com.android.internal.view.menu.IconMenuView.invokeItem(IconMenuView.java:519) 
03-04 11:37:08.780: ERROR/AndroidRuntime(726):  at com.android.internal.view.menu.IconMenuItemView.performClick(IconMenuItemView.java:122) 
03-04 11:37:08.780: ERROR/AndroidRuntime(726):  at android.view.View.onTouchEvent(View.java:3828) 
03-04 11:37:08.780: ERROR/AndroidRuntime(726):  at android.widget.TextView.onTouchEvent(TextView.java:6291) 
03-04 11:37:08.780: ERROR/AndroidRuntime(726):  at android.view.View.dispatchTouchEvent(View.java:3368) 
03-04 11:37:08.780: ERROR/AndroidRuntime(726):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:863) 
03-04 11:37:08.780: ERROR/AndroidRuntime(726):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:863) 
03-04 11:37:08.780: ERROR/AndroidRuntime(726):  at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1691) 
03-04 11:37:08.780: ERROR/AndroidRuntime(726):  at android.view.ViewRoot.handleMessage(ViewRoot.java:1525) 
03-04 11:37:08.780: ERROR/AndroidRuntime(726):  at android.os.Handler.dispatchMessage(Handler.java:99) 
03-04 11:37:08.780: ERROR/AndroidRuntime(726):  at android.os.Looper.loop(Looper.java:123) 
03-04 11:37:08.780: ERROR/AndroidRuntime(726):  at android.app.ActivityThread.main(ActivityThread.java:3948) 
03-04 11:37:08.780: ERROR/AndroidRuntime(726):  at java.lang.reflect.Method.invokeNative(Native Method) 
03-04 11:37:08.780: ERROR/AndroidRuntime(726):  at java.lang.reflect.Method.invoke(Method.java:521) 
03-04 11:37:08.780: ERROR/AndroidRuntime(726):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:782) 
03-04 11:37:08.780: ERROR/AndroidRuntime(726):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:540) 
03-04 11:37:08.780: ERROR/AndroidRuntime(726):  at dalvik.system.NativeStart.main(Native Method) 

Peut donc moi un point où je suis allé mal, je suis en utilisant SDK 1.5

Répondre

10

Vous devez utiliser votre Activty comme Context pour le Dialog pas Application.

Android recherche en vue d'afficher la boîte de dialogue et l'Application n'a pas une, mais votre volonté Activity. Le Application est un objet qui lie votre application entre elle et a un Context car il connaît les paramètres régionaux que vous utilisez et ainsi de suite, mais il dépend d'Activités pour afficher les éléments à l'utilisateur.

Remplacer:

dialog = new Dialog(getApplicationContext()); 

avec:

dialog = new Dialog(this); 
+1

la documentation Android fournit un mauvais exemple, il y a un ticket créé il y a longtemps, mais ce problème est toujours pas réglé! –

Questions connexes