CastClassException en vista personalizada
Cuando intento findViewById()
en mi opinión de encargo findViewById()
el conseguir de un ClassCastException
. He intentado tantas cosas que estoy seguro que he estropeado el código ahora!
Para asegurarse de que no me estoy volviendo loco me despojé de las clases a su mínimo inorder mínimo para encontrar lo que estaba mal.
- Llene el gráfico sinusoidal de Android
- Deslizar / arrastrar la vista de Android desde la parte inferior de la pantalla
- Disposición de la vista Lista de Android Similar a Google play
- Android AlertDialog reglas setView
- Custom attr get devuelve valores inválidos
Soy nuevo en la programación de Android y estoy seguro de que estoy perdiendo algo básico.
Esto es BaseImageView
una clase de vista extendida.
package com.company.product.client.android.gui.views; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.view.View; public class BaseImageView extends View { public BaseImageView(Context context) { super(context); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.drawColor(Color.GREEN); } }
Esta es LiveImageView
una extensión de la clase BaseImageView
.
package com.company.product.client.android.gui.views; import android.content.Context; import android.util.AttributeSet; public class LiveImageView extends BaseImageView { public LiveImageView(Context context, AttributeSet attrs) { super(context); } }
Aquí está el Layout my_view.xml
.
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:gravity="center"> <View class="com.company.product.client.android.gui.views.LiveImageView" android:id="@+id/lvImage" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout>
Y aquí está el onCreate en mi Activity LiveViewActivity
.
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); try { setContentView(R.layout.my_view); final LiveImageView lvImage = (LiveImageView) findViewById(R.id.lvImage); } catch (final Exception e) { Log.e(TAG, "onCreate() Exception: " + e.toString()); e.printStackTrace(); }
Finalmente, esto es un seguimiento de pila.
02-11 17:25:24.829: ERROR/LiveViewActivity(1942): onCreate() Exception: java.lang.ClassCastException: android.view.View 02-11 17:25:24.839: WARN/System.err(1942): java.lang.ClassCastException: android.view.View 02-11 17:25:24.839: WARN/System.err(1942): at com.company.product.client.android.gui.screen.LiveViewActivity.onCreate(LiveViewActivity.java:26) 02-11 17:25:24.839: WARN/System.err(1942): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 02-11 17:25:24.849: WARN/System.err(1942): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459) 02-11 17:25:24.849: WARN/System.err(1942): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512) 02-11 17:25:24.849: WARN/System.err(1942): at android.app.ActivityThread.access$2200(ActivityThread.java:119) 02-11 17:25:24.849: WARN/System.err(1942): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863) 02-11 17:25:24.859: WARN/System.err(1942): at android.os.Handler.dispatchMessage(Handler.java:99) 02-11 17:25:24.859: WARN/System.err(1942): at android.os.Looper.loop(Looper.java:123) 02-11 17:25:24.859: WARN/System.err(1942): at android.app.ActivityThread.main(ActivityThread.java:4363) 02-11 17:25:24.869: WARN/System.err(1942): at java.lang.reflect.Method.invokeNative(Native Method) 02-11 17:25:24.869: WARN/System.err(1942): at java.lang.reflect.Method.invoke(Method.java:521) 02-11 17:25:24.869: WARN/System.err(1942): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) 02-11 17:25:24.869: WARN/System.err(1942): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 02-11 17:25:24.879: WARN/System.err(1942): at dalvik.system.NativeStart.main(Native Method)
- Cómo leer atributos personalizados en Android
- Aplicar como listview
- Android - Personalización del widget Spinner Look and Feel
- Editado: Android Dibuja la imagen de la aguja en este círculo similar al medidor
- Vista elíptica en Android
- Pantalla personalizada con líneas de puntos
- Mapa de bits no dibujado anti-alias
- Vista personalizada CustomView no utiliza los constructores de vista de 2 o 3 argumentos
Cuando se utiliza en archivos XML de diseño, la vista personalizada debe ser:
<com.company.product.client.android.gui.views.LiveImageView android:layout_width="..." ... />
Además, asegúrese de definir las otras dos variantes de constructores para las vistas:
public BaseImageView(Context, AttributeSet); public BaseImageView(Context, AttributeSet, int);
Dado que el inflador de diseño realmente necesita que dos variantes para crear la instancia.
He funcionado en esto antes, uso una etiqueta <view>
minúscula:
<view class="com.company.product.client.android.gui.views.LiveImageView" ... />
Esto es de los docs de Android tema 4:
<view class="com.android.notepad.NoteEditor$MyEditText" id="@+id/note" ...
Intente cambiar su declaración XML
<com.company.product.client.android.gui.views.LiveImageView android:id="@+id/lvImage" android:layout_width="wrap_content" android:layout_height="wrap_content" />
O puede ser debido a un error.
Solución para solucionar: Asigne un nuevo valor 'id' para el CustomView en XML de diseño y findViewById ().
- Un APK que inicia una actividad diferente si su móvil o tablet (Android 2.1+)
- Quiero construir una aplicación de videojuegos para android y ios, pero estoy preocupado por dónde empezar