2012-04-23 2 views
3

Je suis actuellement en train d'élever un DatePickerDialog chaque fois qu'un certain EditText est cliqué. Cependant, chaque fois que je clique sur EditText, l'application se bloque. Voici le code pertinent et LogCat.Android - OnCreateDialog se bloque lors du retour DatePickerDialog

Le EditText et son OnClickListener:

addBirth.setClickable(true); 
    addBirth.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      showDialog(DATE_DIALOG_ID); 
     } 
    }); 

La méthode onCreateDialog et DateSetListener:

@Override 
protected Dialog onCreateDialog(int id) { 
    // TODO Auto-generated method stub 
    switch (id) { 
    case DATE_DIALOG_ID: 
     DatePickerDialog dialog = new DatePickerDialog(getApplicationContext(), mDateSetListener, mYear, mMonth, mDay); 
     return dialog; 
    } 
    return null; 
} 

protected DatePickerDialog.OnDateSetListener mDateSetListener = 
     new DatePickerDialog.OnDateSetListener() { 

      @Override 
      public void onDateSet(DatePicker view, int year, int monthOfYear, 
        int dayOfMonth) { 
       mYear = year; 
       mMonth = monthOfYear; 
       mDay = dayOfMonth; 
       updateDisplay(); 

      } 
     }; 
private void updateDisplay() { 
    addBirth.setText(
      new StringBuilder() 
        .append(mMonth + 1).append("-") 
        .append(mDay).append("-") 
        .append(mYear).append(" ")); 
} 

Et voici le LogCat:

04-23 14:46:56.142: D/AndroidRuntime(751): Shutting down VM 
04-23 14:46:56.142: W/dalvikvm(751): threadid=1: thread exiting with uncaught exception (group=0x40015560) 
04-23 14:46:56.241: E/AndroidRuntime(751): FATAL EXCEPTION: main 
04-23 14:46:56.241: E/AndroidRuntime(751): android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application 
04-23 14:46:56.241: E/AndroidRuntime(751): at android.view.ViewRoot.setView(ViewRoot.java:531) 
04-23 14:46:56.241: E/AndroidRuntime(751): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:177) 
04-23 14:46:56.241: E/AndroidRuntime(751): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91) 
04-23 14:46:56.241: E/AndroidRuntime(751): at android.app.Dialog.show(Dialog.java:241) 
04-23 14:46:56.241: E/AndroidRuntime(751): at android.app.DatePickerDialog.show(DatePickerDialog.java:132) 
04-23 14:46:56.241: E/AndroidRuntime(751): at android.app.Activity.showDialog(Activity.java:2566) 
04-23 14:46:56.241: E/AndroidRuntime(751): at android.app.Activity.showDialog(Activity.java:2524) 
04-23 14:46:56.241: E/AndroidRuntime(751): at com.android.yawus.phone.AddContact$2.onClick(AddContact.java:65) 
04-23 14:46:56.241: E/AndroidRuntime(751): at android.view.View.performClick(View.java:2485) 
04-23 14:46:56.241: E/AndroidRuntime(751): at android.view.View$PerformClick.run(View.java:9080) 
04-23 14:46:56.241: E/AndroidRuntime(751): at android.os.Handler.handleCallback(Handler.java:587) 
04-23 14:46:56.241: E/AndroidRuntime(751): at android.os.Handler.dispatchMessage(Handler.java:92) 
04-23 14:46:56.241: E/AndroidRuntime(751): at android.os.Looper.loop(Looper.java:123) 
04-23 14:46:56.241: E/AndroidRuntime(751): at android.app.ActivityThread.main(ActivityThread.java:3683) 
04-23 14:46:56.241: E/AndroidRuntime(751): at java.lang.reflect.Method.invokeNative(Native Method) 
04-23 14:46:56.241: E/AndroidRuntime(751): at java.lang.reflect.Method.invoke(Method.java:507) 
04-23 14:46:56.241: E/AndroidRuntime(751): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
04-23 14:46:56.241: E/AndroidRuntime(751): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
04-23 14:46:56.241: E/AndroidRuntime(751): at dalvik.system.NativeStart.main(Native Method) 

Répondre

7

Ne jamais utiliser getApplicationContext() pour créer des boîtes de dialogue.

Essayez ceci.

DatePickerDialog dialog = new DatePickerDialog(YourActivity.this, mDateSetListener, mYear, mMonth, mDay); 
+0

Pouvez-vous expliquer pourquoi? Je voudrais savoir pour une raison autre que "Ça ne marche pas". –

+0

Étant donné que le dialogue a besoin d'une activité en tant que fenêtre parent, le contexte d'application est simplement utilisé pour stocker l'état global, ne crée pas de "fenêtre". AUTANT QUE JE SACHE. – st0le

+0

Nous devons utiliser Activity instande au lieu de l'instance Context. –

Questions connexes