Question

Je suis nouveau à Java, Eclipse, et le développement Android, donc je manque peut-être quelque chose de simple, bien que j'ai vérifié des choses de base comme l'orthographe plusieurs fois.

Parce qu'il n'y a pas de contrôle de sélecteur de numéro (tel que celui utilisé dans le sélecteur de date) dans le SDK Android public, le la sagesse est "clone et propre" le contrôle qui existe dans la source Android.

Pour tenter de le faire, j'ai copié le code pour NumberPicker dans mon projet et sa dépendance, NumberPickerButton. J'ai aussi copié les ressources à l'appui.

Le problème que j'ai est que lorsque je tente d'inclure le NumberPicker dans une mise en page, la version rendu de la mise en page au sein d'Eclipse ne fonctionne pas.

<com.spencerandbrown.PatientTracker1.NumberPicker 
android:layout_width="wrap_content" 
android:layout_height="wrap_content"  
android:id="@+id/spanEnd2" />

Ajout de cette balise provoque l'affichage de la mise en page du fichier XML pour afficher uniquement l'erreur suivante.

ClassCastException: com.spencerandbrown.PatientTracker1.NumberPickerButton cannot be cast to com.spencerandbrown.PatientTracker1.NumberPickerButton

Je l'ai essayé à la fois le nom complet et le nom non qualifié et il ne fait aucune différence.

La chose étrange est que les travaux de contrôle au moment de l'exécution, juste ne rendre dans Eclipse.

Y at-il une solution à ce problème? Est-ce que je fais quelque chose de mal?

Si nécessaire, je peux inclure plus de code de mon projet pour clarifier.

Si je référence le widget Android interne, il fonctionne très bien dans la vue de la mise en page Eclipse, mais il est maladroit d'interagir avec cette façon et il pourrait briser à l'avenir.

<com.android.internal.widget.NumberPicker
android:layout_width="wrap_content"
android:layout_height="wrap_content" 
android:id="@+id/spanStart"/>

Voici la trace de la pile de Eclipse.

java.lang.ClassCastException: com.spencerandbrown.PatientTracker1.NumberPickerButton cannot be cast to com.spencerandbrown.PatientTracker1.NumberPickerButton
at com.spencerandbrown.PatientTracker1.NumberPicker.<init>(NumberPicker.java:110)
at com.spencerandbrown.PatientTracker1.NumberPicker.<init>(NumberPicker.java:98)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:532)
at com.android.ide.eclipse.adt.internal.editors.layout.ProjectCallback.instantiateClass(Unknown Source)
at com.android.ide.eclipse.adt.internal.editors.layout.ProjectCallback.loadView(Unknown Source)
at android.view.BridgeInflater.loadCustomView(BridgeInflater.java:198)
at android.view.BridgeInflater.createViewFromTag(BridgeInflater.java:126)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:617)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:620)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:620)
at android.view.LayoutInflater.inflate(LayoutInflater.java:407)
at android.view.LayoutInflater.inflate(LayoutInflater.java:296)
at com.android.layoutlib.bridge.Bridge.computeLayout(Bridge.java:377)
at com.android.ide.eclipse.adt.internal.editors.layout.GraphicalLayoutEditor.computeLayout(Unknown Source)
at com.android.ide.eclipse.adt.internal.editors.layout.GraphicalLayoutEditor.recomputeLayout(Unknown Source)
at com.android.ide.eclipse.adt.internal.editors.layout.GraphicalLayoutEditor.activated(Unknown Source)
at com.android.ide.eclipse.adt.internal.editors.layout.LayoutEditor.pageChange(Unknown Source)
at org.eclipse.ui.part.MultiPageEditorPart$2.widgetSelected(MultiPageEditorPart.java:291)
at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:228)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1176)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1200)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1185)
at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:1025)
at org.eclipse.swt.custom.CTabFolder.setSelection(CTabFolder.java:3256)
at org.eclipse.swt.custom.CTabFolder.onMouse(CTabFolder.java:2045)
at org.eclipse.swt.custom.CTabFolder$1.handleEvent(CTabFolder.java:323)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1176)
at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3493)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3112)
at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2405)
at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2369)
at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2221)
at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:500)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:493)
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:113)
at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:194)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:368)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:616)
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:559)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:514)
at org.eclipse.equinox.launcher.Main.run(Main.java:1311)
Était-ce utile?

La solution

Solution: J'ai trouvé que si je surprends et ignorer le ClassCastException, et, évidemment, ne tentez rien à faire avec la vue que je tentais de trouver, il n'y a pas d'autres problèmes et je peux utiliser l'éditeur de mise en page à nouveau: l'éditeur se charge tout à fait heureux, et d'en tirer la initialise vue problématique, vous ne pouvez pas lancer à sa classe.

try {
    picker = (NumberPicker) findViewById(R.id.myPicker);
    picker.blargh();
    // everything else involving picker
} catch (ClassCastException issue6894) {}  // ignore

Autres conseils

Si cela est semblable au bogue http: // Code .google.com / p / android / questions / détail? id = 6894 (À savoir la vue personnalisée charge une autre vue personnalisée), le problème est probablement dû au chargeur de classe personnalisée qui charge les classes de vue personnalisée.

vous pouvez utiliser View.isInEditMode (uniquement renvoie true lorsque votre code est en cours d'exécution à l'intérieur de l'éclipse) si vous voulez bien différencier entre courir à l'intérieur ou à l'intérieur Eclipse Android.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top