Impossible d'instancier Fragment
Impossible d'instancier fragment assurez-vous que le nom de classe existe, est public,
et a un constructeur vide, c'est les
Est-ce parce que mon Fragment n'est pas une classe statique?
Est-ce parce que mon Fragment est un intérieur de classe?
Si je fais mon Fragment d'une classe statique, toutes mes références à findViewById échec, ce qui signifie BEAUCOUP de refactoring.
Comment puis-je résoudre ce sans tourner mes intérieure Fragment dans une classe statique?
- quel problème essayez-vous de résoudre?
- la Réponse de parler pour soi
- Ouais, bien fait. OK mal formulé des commentaires sur mon compte, mais hé ho!
Vous devez vous connecter pour publier un commentaire.
Comme CommonsWare dit la rendre statique ou en mode autonome, en plus, ne sais pas pourquoi vous avez besoin d'un shedload de refactoring pour arriver
findViewById
de travail. Suggestions:L'aide de la vue gonflé dans
onCreateView
,ou de l'appelant dans
onActivityCreated(.....)
Mais même si vous avez encore besoin d'un chargement de refactoring alors c'est peut-être juste la façon dont il est, de convertir une application pour utiliser des fragments n'est pas venu pour gratuit ayant tout juste terminé un projet de le faire.
Si votre fragment est un intérieur de classe, il doit être statique intérieur de la classe. Idéalement, c'est un public autonome de la classe Java.
Vous avez besoin de faire du refactoring de toute façon. Les Widgets sont maintenant détenue par le fragment, et non pas l'activité. Les Fragments doivent en savoir le moins possible sur l'activité qui les contient, de sorte qu'ils peuvent être mélangées entre les différentes activités nécessaires à l'appui de téléphones, tablettes, TV, etc.
Vous rendre autonome public de la classe Java.
Votre Fragment ne devriez pas avoir de constructeurs (voir cette documentation et ses exemples).
Vous devriez avoir un
newInstance()
statique de la définition de la méthode et de passer des paramètres via des arguments (bundle)Par exemple:
Et de lire ces arguments à onCreate:
De cette façon si détachée et re-joint l'état de l'objet peut être stocké par les arguments, à l'instar de faisceaux attaché à ses Intentions.
J'ai eu ce problème aussi bien s'avère qu'il était confus parce que mon custom Fragment avait un constructeur.
J'ai renommé la méthode de constructeur, et a appelé la nouvelle méthode au moment de l'instanciation, et cela a fonctionné!
Dans mon cas, j'ai été absent le constructeur, le post de @eoghanm ci-dessus m'a aidé à
À l'aide de setRetainInstance(vrai) a travaillé pour nous. Nos classes intérieures maintenant ressembler à ceci:
PS. Voici un site intéressant sur setRetainInstance(boolean): La compréhension du Fragment setRetainInstance(boolean)
si vous ne voulez pas faire l'intérieur de la classe statique, essayez de remplacer la méthode onPause de la boîte de dialogue fragment comme ceci:
de sorte que le fragment doit être détruit lors de l'application va sur pause et il n'y a pas d'exception. je l'ai essayé et qui fonctionne.
Assurez-vous que le Fragment n'est pas abstraite. Copie&coller rend ce genre de choses se produit 🙁
L'intérieur le constructeur de la classe doit être de passer une instance de l'extérieur de la classe. donc, il est dit que le compilateur ne peut pas trouver le constructeur qui n'a pas de paramètre. il devrait donc être mis en statique de autres fichier java.
j'ai rencontrer ce problème
vous avez besoin d'utiliser nom complet de la classe :
par exemple:
Le Fragment.instancier(MainActivity.ce, com.XX.yourFragmentName);
doit nom complet de la classe
Hahah mon hilarant problème est que j'avais un appel à
getString()
en tant que membre de niveau variable dans mon fragment qui est un gros no pas parce que c'est trop tôt je pense. Je souhaite que l'erreur a été plus descriptif!