Domanda

Sono nuovo di Java, Eclipse, e lo sviluppo di Android, così che io possa essere manca qualcosa di semplice, anche se ho controllato cose di base come ortografia più volte.

Poiché non v'è alcun controllo Number Picker (come quello usato nella selezione data) nel SDK pubblico Android, il saggezza convenzionale è quello di "clonare e proprio" il controllo che esiste nel source Android.

Nel tentativo di farlo, ho copiato il codice per NumberPicker nel mio progetto e la sua dipendenza, NumberPickerButton. Ho anche copiato le risorse di supporto.

Il problema che sto avendo è che quando cerco di includere il NumberPicker in un layout, la versione resa del layout all'interno di Eclipse non funziona.

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

L'aggiunta di tag che provoca la visualizzazione Layout del file XML per visualizzare solo il seguente errore.

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

Ho provato sia il nome completo e il nome non qualificato e non fa differenza.

La cosa strana è che i lavori di controllo in fase di esecuzione, ma semplicemente non rendere in Eclipse.

C'è una soluzione per questo problema? Sto solo facendo qualcosa di sbagliato?

Se necessario, posso includere più codice dal mio progetto di chiarire.

Se mi riferisco il widget interna Android, funziona benissimo nella visualizzazione Layout di Eclipse, ma è goffo di interagire con quel modo e si potrebbe rompere in futuro.

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

Questa è la traccia dello stack da 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)
È stato utile?

Soluzione

Soluzione: ho scoperto che se prendo e ignorare il ClassCastException, e, ovviamente, quindi non cerco di fare qualsiasi cosa con la vista che stavo cercando di trovare, non ci sono ulteriori problemi e posso usare di nuovo l'editor di layout: l'editor sarà tranquillamente caricare, inizializzare e disegnare la visione problematica, non si può lanciare per la sua classe.

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

Altri suggerimenti

Se questo è simile al bug in http: // codice .google.com / p / android / temi / dettaglio? id = 6894 (Vale a dire la visualizzazione personalizzata carica un altro visualizzazione personalizzata), allora il problema è probabilmente dovuto al caricatore di classe personalizzata che carica le classi visualizzazione personalizzata.

è possibile utilizzare View.isInEditMode (restituisce vero solo quando il codice è in esecuzione all'interno di Eclipse) se si vuole differenziare correttamente tra esecuzione all'interno di Eclipse o all'interno di Android.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top