2011-08-04 11 views
6

Utilizo la biblioteca de soporte de Android para usar fragmentos en aplicaciones pre Honeycomb.¿Por qué recibo IllegalStateExceptions cada vez que inicio una actividad que usa fragmentos de soporte?

Si agrego un fragmento dentro del método onCreate de mi actividad, la actividad falla con una IllegalStateException.

08-04 10:19:49.100: ERROR/AndroidRuntime(18501): FATAL EXCEPTION: main 
08-04 10:19:49.100: ERROR/AndroidRuntime(18501): java.lang.RuntimeException: Unable to start activity ComponentInfo{net..../net.....homescreen...Main}: java.lang.IllegalStateException: Activity has been destroyed 
08-04 10:19:49.100: ERROR/AndroidRuntime(18501):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1651) 
08-04 10:19:49.100: ERROR/AndroidRuntime(18501):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667) 
08-04 10:19:49.100: ERROR/AndroidRuntime(18501):  at android.app.ActivityThread.access$1500(ActivityThread.java:117) 
08-04 10:19:49.100: ERROR/AndroidRuntime(18501):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935) 
08-04 10:19:49.100: ERROR/AndroidRuntime(18501):  at android.os.Handler.dispatchMessage(Handler.java:99) 
08-04 10:19:49.100: ERROR/AndroidRuntime(18501):  at android.os.Looper.loop(Looper.java:123) 
08-04 10:19:49.100: ERROR/AndroidRuntime(18501):  at android.app.ActivityThread.main(ActivityThread.java:3691) 
08-04 10:19:49.100: ERROR/AndroidRuntime(18501):  at java.lang.reflect.Method.invokeNative(Native Method) 
08-04 10:19:49.100: ERROR/AndroidRuntime(18501):  at java.lang.reflect.Method.invoke(Method.java:507) 
08-04 10:19:49.100: ERROR/AndroidRuntime(18501):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:847) 
08-04 10:19:49.100: ERROR/AndroidRuntime(18501):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:605) 
08-04 10:19:49.100: ERROR/AndroidRuntime(18501):  at dalvik.system.NativeStart.main(Native Method) 
08-04 10:19:49.100: ERROR/AndroidRuntime(18501): Caused by: java.lang.IllegalStateException: Activity has been destroyed 
08-04 10:19:49.100: ERROR/AndroidRuntime(18501):  at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1257) 
08-04 10:19:49.100: ERROR/AndroidRuntime(18501):  at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:535) 
08-04 10:19:49.100: ERROR/AndroidRuntime(18501):  at android.support.v4.app.BackStackRecord.commit(BackStackRecord.java:519) 
08-04 10:19:49.100: ERROR/AndroidRuntime(18501):  at net.....AbstractActivity.onCreate(AbstractActivity.java:103) 
08-04 10:19:49.100: ERROR/AndroidRuntime(18501):  at net.....homescreen...Main.onCreate(..Main.java:51) 
08-04 10:19:49.100: ERROR/AndroidRuntime(18501):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
08-04 10:19:49.100: ERROR/AndroidRuntime(18501):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615) 
08-04 10:19:49.100: ERROR/AndroidRuntime(18501):  ... 11 more 

El onCreate de la AbstractActivity se parece a esto:

protected void onCreate(Bundle savedInstanceState) { 
    if (menuEnabled) { 
     FragmentManager fragmentManager = getCompatibleFragmentManager(); 
     FragmentTransaction transaction = fragmentManager 
       .beginTransaction(); 
     transaction.add(new OptionsMenuFragment(), OPTIONS_MENU_IDENTIFIER); 
     transaction.commit(); 
    } 
    super.onCreate(savedInstanceState); 
} 

Si puedo depurar la llamada veo que el fragmentmanager lanza esta excepción porque la actividad es nula. Parece que fragmentmanager no se inicializa en absoluto.

¿Qué estoy haciendo mal?

Respuesta

13

Resulta que la FragmentActivity de los paquetes de compatibilidad inicializa el administrador de fragmentos en el método onCreate.

Si muevo la llamada a super al principio de mi método onCreate todo funciona bien.

+0

Agradable, gracias. – nobre

+4

También obtengo IllegalStateException usando Fragmentos de la biblioteca de compatibilidad ... pero no está relacionado con esto, mis llamadas a super ya están al principio de onCreate (también en las superclases) – Ixx

+1

Bien, acabo de volver con el mismo problema y estaba confundido que no pude renunciar ... Parece que no soy un aprendiz rápido. – Janusz

Cuestiones relacionadas