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?
10
A
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]
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
Grazie, Eric. Voglio solo capire cosa sta succedendo dietro le quinte, perché questo accade. – Eugene
Sì, ho esattamente lo stesso problema con la classe ViewPager e Fragment. – WELLCZECH