Grrr ...Erreur de référencement d'une classe interne Afficher dans layout/main.xml
Je crée une sous-classe de vue en tant que classe interne dans mon activité. Avant j'ai simplement lié à cette vue de mon activité avec:
setContentView(new CustomView(this));
sans problèmes. Maintenant, cependant, mon point de vue devient de plus en plus complexe, donc je le fais partie d'un FrameLayout afin que je puisse en faire la vue de base et y ajouter un widget Spinner. Le problème est, quand je fais ce que je reçois une erreur:
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.grafightscratch.ochemmer/com.grafightscratch.ochemmer.MoleculeTablet}: android.view.InflateException: Binary XML file line #4: Error inflating class com.grafightscratch.ochemmer.MoleculeTablet.MoleculeTabletView
...
Caused by: android.view.InflateException: Binary XML file line #4: Error inflating class com.grafightscratch.ochemmer.MoleculeTablet.MoleculeTabletView
...
Caused by: java.lang.ClassNotFoundException: com.grafightscratch.ochemmer.MoleculeTablet.MoleculeTabletView in loader [email protected]
So- ce point de vue travaillé avant quand je lié à directement, mais quand j'ai essayé de l'ajouter dans le fichier main.xml dans le cadre d'un framelayout J'ai l'erreur ci-dessus. J'ai également essayé de mettre dans une mise en page avec seulement il être affiché via:
<com.grafightscratch.ochemmer.MoleculeTablet.MoleculeTabletView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/molecule_tablet_view"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/>
Rien ne fonctionne. Je continue d'obtenir les erreurs InflateException/ClassNotFoundException. Il se plaint de "ligne # 3" dans le fichier XML binaire, et s'il parle de main.xml c'est la déclaration du paquet que j'ai triplement vérifiée.
EDIT J'ai essayé de faire de cette vue une classe séparée (c'est-à-dire pas une classe interne) et cela fonctionne. Après quelques recherches autour j'ai trouvé quelques messages disant que la balise XML devrait ressembler à ceci:
<com.grafightscratch.ochemmer.MoleculeTablet$MoleculeTabletView ...>
Ie, un signe de dollar devrait être utilisé pour séparer la classe interne de la classe principale. Cependant, Eclipse barre à ce sujet, l'appelle une erreur, et refuse de me laisser construire ou déployer avec ce personnage là. Alors maintenant la question devient: comment fait-on référence à une vue qui est une classe interne?
Juste une note ici, la balise xml doit être "plus proche" de votre classe que la balise 'View' (dans mon cas, j'avais besoin d'un' ViewGroup') –
Bien que je ne reçoive pas d'erreur, quand je récupère la vue (en utilisant findViewById), j'obtiens une instance de 'android.view.View', pas une instance de la classe interne. Ce qui donne? – yoaquim
Assurez-vous que la balise de vue xml est minuscule, alors vous devriez pouvoir la convertir dans la classe que vous avez spécifiée – wkarl