2012-07-19 17 views
10

Se ho avuto il mio DialogFragment dichiarato come interno classe ho ricevuto una InstantiationException su orientation change, cioè quando istanza viene ricreato, che dice che non c'è costruttore pubblico, ecc classe non è pubblica In realtà tutto è public, costruttore di default è a posto. Se metto semplicemente questo DialogFragment in un file separato, tutto va bene. Non sto cercando una soluzione alternativa, voglio solo capire perché questo sta accadendo.Perché DialogFragment non può essere una classe interna?

+0

Non ne sono completamente sicuro, ma penso che 'DialogFragment's, se all'interno di una classe, deve essere' static'. Sfortunatamente, non ho alcuna citazione per questo, solo che ogni esempio funzionante che ho visto usa l'implementazione 'static'. Dall'esame del tuo messaggio di ieri, capisco che questa non è una soluzione fattibile, ma credo che sia così. Forse qualcun altro può fare più luce su questo ... – Eric

+0

Grazie, Eric. Voglio solo capire cosa sta succedendo dietro le quinte, perché questo accade. – Eugene

+0

Sì, ho esattamente lo stesso problema con la classe ViewPager e Fragment. – WELLCZECH

risposta

8

Questa sembra essere una restrizione in Java in base a come Fragments vengono creati e ricreati.

sembra che tutti Fragment s devono essere reinstantiated in determinate situazioni [1], quali variazioni di orientamento (e immagino all'inizializzazione, a seconda di come viene creata la Fragment). Ciò significa che sarà reintegrato al di fuori della tua classe esterna. Tuttavia, una classe interna non- static non può essere istanziata dall'esterno della classe esterna. [2] Esistono anche altri casi in cui è necessario comunicare un Fragment dall'esterno della classe. [3]

Problemi correlati