Frage

Ich bin neu zu Java, Eclipse und Android-Entwicklung, so dass ich etwas einfach nicht fehlen darf, obwohl ich grundlegenden Dinge wie Rechtschreibung mehrmals überprüft habe.

Da gibt es keine Nummer Aufnehmersteuersystem (wie das in der Datumsauswahl verwendet wird) im öffentlichen Android SDK, die konventionelle Weisheit ist "klonen und eigene" das Steuerelement, das in der Android-Quelle vorhanden ist.

In einem Versuch, das zu tun, habe ich den Code für Number in mein Projekt kopiert und die Abhängigkeit, NumberPickerButton. Ich habe auch die unterstützenden Ressourcen kopiert.

Das Problem, das ich habe, ist, dass, wenn ich versuche, die Number in einem Layout enthalten, die gerenderte Version des Layouts innerhalb von Eclipse funktioniert nicht.

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

das Tag Hinzufügen bewirkt, dass die Layout-Ansicht der XML-Datei nur die folgende Fehlermeldung an.

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

Ich habe versucht, sowohl die vollständig qualifizierten Namen und die nicht qualifizierten Namen und es macht keinen Unterschied.

Das Merkwürdige ist, dass die Steuerung zur Laufzeit arbeitet, wird es einfach nicht in Eclipse machen.

Gibt es eine Lösung für dieses Problem? Bin ich etwas falsch nur tun?

Bei Bedarf kann ich mehr Code von meinem Projekt gehört zu klären.

Wenn ich den internen Android-Widget zu verweisen, es funktioniert gut in der Eclipse-Layout-Ansicht, aber es ist ungeschickt mit dieser Art und Weise zu interagieren, und es könnte in Zukunft brechen.

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

Hier ist der Stack-Trace von 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)
War es hilfreich?

Lösung

Lösung: Ich habe festgestellt, dass, wenn ich die Classcast fangen und ignorieren, und natürlich dann nicht versuchen, etwas mit der Aussicht ich zu tun versuchte, zu finden gibt es keine weiteren Probleme und ich kann das Layout-Editor wieder: wird der Editor ganz glücklich laden, initialisieren und die problematische Ansicht zieht, kann man einfach nicht zu seiner Klasse werfen.

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

Andere Tipps

Wenn dies der Fehler ähnlich ist unter http: // Code .google.com / p / android / Ausgaben / detail? id = 6894 (Dh die benutzerdefinierte Ansicht Lasten eines andere benutzerdefinierte Ansicht), dann ist das Problem wahrscheinlich auf den benutzerdefinierten Class Loader, dass lädt die benutzerdefinierte Ansicht Klassen.

Sie View.isInEditMode verwenden können (nur true zurück, wenn der Code in Eclipse ausgeführt wird), wenn Sie zwischen läuft in Eclipse oder im Android richtig zu unterscheiden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top