2012-07-19 9 views
10

Si tuviera mi DialogFragment declarada como una clase interna Tengo una InstantiationException en orientation change, es decir, cuando se recrea ejemplo, que dice que no hay constructor público, la clase no es público, etc. De hecho todo lo que se public, constructor por defecto esta en su lugar. Si muevo este DialogFragment a un archivo separado, todo va bien. No estoy buscando una solución, solo quiero entender por qué está sucediendo esto.¿Por qué DialogFragment no puede ser una clase interna?

+0

No estoy del todo seguro, pero creo que 'DialogFragment's, si pertenece a una clase, tiene que ser' static'. Lamentablemente, no tengo ninguna cita para esto, solo que cada ejemplo de trabajo que he visto utiliza la implementación 'estática'. Desde la esencia de su publicación de ayer, entiendo que esta no es una solución factible, pero creo que este es el caso. Tal vez alguien más pueda arrojar más luz sobre esto ... – Eric

+0

Gracias, Eric. Solo quiero entender lo que sucede detrás de escena, por qué sucede esto. – Eugene

+0

Sí, tengo exactamente el mismo problema con la clase ViewPager y Fragment. – WELLCZECH

Respuesta

8

Esto parece ser una restricción en Java según cómo se crean y vuelven a crear Fragments.

Parece que todos Fragment s tienen que ser reinstantiated en ciertas situaciones [1], como los cambios de orientación (y me imagino en la inicialización, dependiendo de cómo se crea la Fragment). Esto significa que será reintegrado desde fuera de su clase externa. Sin embargo, una clase interna no static no se puede instanciar desde fuera de la clase externa. [2] También hay otros casos en los que un Fragment necesitaría ser comunicado desde fuera de la clase. [3]

Cuestiones relacionadas