Eclipse classcastException عند محاولة توسيع تخطيط XML لنظام Android

StackOverflow https://stackoverflow.com/questions/2078475

سؤال

أنا جديد على تطوير Java و Eclipse و Android ، لذلك قد أفتقد شيئًا بسيطًا على الرغم من أنني راجعت أشياء أساسية مثل الإملاء عدة مرات.

لأنه لا يوجد عنصر تحكم في منتقي الأرقام (مثل تلك المستخدمة في منتقي التاريخ) في نظام Android SDK العام ، حكمة تقليدية هو "استنساخ وتملك" التحكم الموجود في مصدر Android.

في محاولة للقيام بذلك ، قمت بنسخ الكود لـ NumberPicker في مشروعي واعتماده ، NumberPickerButton. لقد قمت أيضًا بنسخ الموارد الداعمة.

المشكلة التي أواجهها هي أنه عندما أحاول تضمين NumberPicker في تخطيط ، فإن الإصدار المقدم من التخطيط داخل Eclipse لا يعمل.

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

تؤدي إضافة هذه العلامة إلى عرض طريقة عرض ملف XML فقط لإظهار الخطأ التالي.

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

لقد جربت كل من الاسم المؤهل بالكامل والاسم غير المؤهل ولا يحدث فرق.

الشيء الغريب هو أن التحكم يعمل في وقت التشغيل ، ولن يتم عرضه في Eclipse.

هل هناك حل لهذه القضية؟ هل أنا فقط أفعل شيئًا خاطئًا؟

إذا لزم الأمر ، يمكنني تضمين المزيد من التعليمات البرمجية من مشروعي للتوضيح.

إذا أشرت إلى أداة Android الداخلية ، فإنها تعمل بشكل جيد في عرض تخطيط Eclipse ، ولكن من الممكن التفاعل مع هذه الطريقة وقد تنكسر في المستقبل.

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

هنا تتبع المكدس من 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)
هل كانت مفيدة؟

المحلول

الحل البديل: لقد وجدت أنه إذا قمت بالقبض وتجاهل ClasscastException ، ومن الواضح أنه لا تحاول فعل أي شيء مع العرض الذي كنت أحاول العثور عليه ، فلا توجد مشاكل أخرى ويمكنني استخدام محرر التخطيط مرة أخرى: المحرر سوف لحسن الحظ تحميل ، وتهيئة ورسم العرض الإشكالي ، لا يمكنك إلقاءها على صفها.

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

نصائح أخرى

إذا كان هذا مشابهًا للخطأ في http://code.google.com/p/android/issues/detail؟id=6894(أي أن العرض المخصص يقوم بتحميل عرض مخصص آخر) ، فمن المحتمل أن تكون المشكلة بسبب محمل الفئة المخصصة التي تقوم بتحميل فئات العرض المخصصة.

يمكنك استخدام View.IsinizedItMode (يعود فقط بشكل صحيح عندما يتم تشغيل الكود داخل Eclipse) إذا كنت ترغب في التمييز بشكل صحيح بين التشغيل داخل Eclipse أو Inside Android.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top