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]
Problemi correlati
- 1. Una classe DialogFragment interna può essere statica o no?
- 2. Una classe interna di una classe template può essere una classe non template?
- 3. Generici Java: perché l'interfaccia interna non può essere implementata da una superinterfaccia (interna)?
- 4. Perché una classe Java non può essere dichiarata come statica?
- 5. Perché una classe interna serializzabile non è serializzabile?
- 6. Perché una classe interna non statica non può avere membri statici (campi e metodi)?
- 7. È una classe interna
- 8. Scala non può accedere alla classe interna Java?
- 9. Perché una struttura non gestita non può essere un membro di una classe gestita?
- 10. testare una classe interna
- 11. Perché una Struct non può essere derivata da un'altra struttura?
- 12. perché una variabile locale non può essere volatile in C#?
- 13. Proxy non può essere lanciato alla classe
- 14. Perché una funzione membro PRIVATE non può essere una funzione di amicizia di un'altra classe?
- 15. IllegalStateException: DialogFragment non può essere collegato a una vista container - (in ActionBarActivity)
- 16. Subclassing classe interna da esterno Classe contro altra classe interna
- 17. Il vincolo non può essere una classe speciale 'System.Object'
- 18. taskdef org.apache.catalina.ant.InstallTask classe non può essere trovato
- 19. Come rendere una classe interna Parcelable
- 20. classe Annotate con classe interna
- 21. Perché la classe interna può accedere a un membro privato di un'altra classe interiore?
- 22. Perché non si può usare un blocco di inizializzazione per una variabile statica in una classe interna?
- 23. Perché una struttura C# non può essere ereditata?
- 24. Perché una grammatica LL non può essere lasciata ricorsiva?
- 25. Perché una stringa non può essere nulla in Go?
- 26. Classe interna classe Golang
- 27. perché jspService() non può essere sovrascritto?
- 28. Perché datetime non può essere confrontato?
- 29. Perché una classe non può essere scaricata senza scaricare il classloader?
- 30. Perché una classe di primo livello non può essere statica in Java?
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