Grrr...
Je crée une sous-classe de view comme classe interne dans mon Activity. Avant, j'établissais simplement un lien vers cette vue depuis mon activité avec :
setContentView(new CustomView(this));
sans problèmes.
Cependant, ma vue devient de plus en plus complexe. Je l'intègre donc à un FrameLayout afin d'en faire la vue de base et d'y ajouter un widget Spinner. Le problème est que lorsque je fais cela, j'obtiens 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 dalvik.system.PathClassLoader@43b74a28
Ainsi, cette vue fonctionnait auparavant lorsque j'établissais un lien direct avec elle, mais lorsque j'ai essayé de l'ajouter dans le fichier main.xml en tant que partie d'un framelayout, j'ai obtenu l'erreur ci-dessus. J'ai également essayé de l'intégrer dans une mise en page avec uniquement l'affichage 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 à obtenir les erreurs InflateException/ClassNotFoundException. Il se plaint de la "ligne 3" dans le fichier XML binaire, et s'il s'agit de main.xml, c'est la déclaration du paquet que j'ai vérifiée trois fois.
EDITAR 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, j'ai trouvé des messages disant que la balise xml devrait ressembler à ceci :
<com.grafightscratch.ochemmer.MoleculeTablet$MoleculeTabletView ...>
En d'autres termes, un signe de dollar doit être utilisé pour séparer la innerclass de la classe principale. Cependant, Eclipse se rebiffe sur ce point, l'appelle une erreur et refuse de me laisser construire ou déployer avec ce caractère. La question qui se pose est donc la suivante : comment référencer une vue qui est une classe interne ?