Error al inflarse al extender una clase
Estoy tratando de crear una vista personalizada GhostSurfaceCameraView
que extiende SurfaceView
. Aquí está mi archivo de definición de clase
GhostSurfaceCameraView.java
:
- Indicador de actualización de Android SwipeRefreshLayout no visible
- ¿Por qué el título no está centrado en la barra de herramientas?
- Cambiar el fondo del botón alfa sin cambiar el valor del alfabeto del texto en Android?
- Declaración de atributos elegibles en Android
- Ayuda de contenido de Android de Eclipse no funciona
public class GhostSurfaceCameraView extends SurfaceView implements SurfaceHolder.Callback { SurfaceHolder mHolder; Camera mCamera; GhostSurfaceCameraView(Context context) { super(context); // Install a SurfaceHolder.Callback so we get notified when the // underlying surface is created and destroyed. mHolder = getHolder(); mHolder.addCallback(this); mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); } public void surfaceCreated(SurfaceHolder holder) { // The Surface has been created, acquire the camera and tell it where to draw. mCamera = Camera.open(); try { mCamera.setPreviewDisplay(holder); } catch (IOException exception) { mCamera.release(); mCamera = null; // TODO: add more exception handling logic here } } public void surfaceDestroyed(SurfaceHolder holder) { // Surface will be destroyed when we return, so stop the preview. // Because the CameraDevice object is not a shared resource, it's very // important to release it when the activity is paused. mCamera.stopPreview(); mCamera.release(); mCamera = null; } public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) { // Now that the size is known, set up the camera parameters and begin // the preview. Camera.Parameters parameters = mCamera.getParameters(); parameters.setPreviewSize(w, h); parameters.set("orientation", "portrait"); // parameters.setRotation(90); // API 5+ mCamera.setParameters(parameters); mCamera.startPreview(); } }
Y esto está en mi ghostviewscreen.xml:
<com.alpenglow.androcap.GhostSurfaceCameraView android:id="@+id/ghostview_cameraview" android:layout_width="fill_parent" android:layout_height="fill_parent"/>
Ahora en la actividad que hice:
protected void onCreate(Bundle savedInstanceState) { try { super.onCreate(savedInstanceState); setContentView(R.layout.ghostviewscreen); } }
Cuando se llama a setContentView()
se setContentView()
una excepción:
Binary XML file 09-17 22:47:01.958: ERROR/ERROR(337): ERROR IN CODE: android.view.InflateException: Binary XML file line #14: Error inflating class com.alpenglow.androcap.GhostSurfaceCameraView
¿Puede alguien decirme por qué consigo este error? Gracias.
- Múltiples animaciones en 1 imageview android
- Android NDK r4 san-angeles problema
- Error Button textColor y drawablePadding en pre-Lollipop usando Appcompat
- RSS Feed y ejemplo de adaptador de Google XML - ¿Funciona?
- Archivo binario línea # 7: Debe proporcionar un atributo layout_width
- Android: Cómo utilizar herramientas con diseño de inclusión
- Vinculación de datos de Android en vistas individuales agregadas a LinearLayout mediante programación?
- Color Estado Lista no reconocida en forma Drawable
Creo que descubrí por qué esto no funcionaba. Sólo estaba proporcionando un constructor para el caso de un parámetro 'context' cuando debería haber proporcionado un constructor para el caso de dos parámetros 'Context, AttributeSet'. También necesitaba dar al constructor (s) acceso público. Aquí está mi solución:
public class GhostSurfaceCameraView extends SurfaceView implements SurfaceHolder.Callback { SurfaceHolder mHolder; Camera mCamera; public GhostSurfaceCameraView(Context context) { super(context); init(); } public GhostSurfaceCameraView(Context context, AttributeSet attrs) { super(context, attrs); init(); } public GhostSurfaceCameraView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); init(); }
@Tim – Ambos constructores no son necesarios, solo el constructor ViewClassName (Context context, AttributeSet attrs) es necesario. Encontré esto de la manera dolorosa, después de horas y horas de tiempo perdido.
Soy muy nuevo en el desarrollo de Android, pero estoy haciendo una suposición salvaje aquí, que tal vez debido al hecho de que, ya que estamos añadiendo la clase de vista personalizada en el archivo XML, estamos fijando varios atributos en el XML, que Necesitan ser procesados en el momento de la instancia. Alguien mucho más conocedor que yo será capaz de arrojar una luz más clara sobre este asunto sin embargo.
Otra posible causa del mensaje "Error inflar la clase" podría ser la falta de ortografía del nombre completo del paquete donde se especifica en XML:
<com.alpenglow.androcap.GhostSurfaceCameraView android:id="@+id/ghostview_cameraview" android:layout_width="fill_parent" android:layout_height="fill_parent"/>
Abrir el archivo XML de diseño en el editor XML de Eclipse debería resaltar este problema.
Tuve este error me plagando durante las últimas horas. Resulta que había añadido la lib de vista personalizada como un módulo en Android Studio, pero había olvidado añadirlo como una dependencia en el build.gradle
la aplicación.
dependencies { ... compile project(':gifview') }
Es importante escribir ruta de acceso de clase completa en el xml. Tengo 'Error inflating class' cuando sólo se escribió el nombre de la subclase.
Tuve el mismo problema extendiendo un TextEdit. Para mí el error fue que no agregué "público" al constructor. En mi caso funciona aunque defina solo un constructor, el de argumentos Context
y AttributeSet
. La cosa cableada es que el error se revela solo cuando construyo un APK (cantado o no) y lo transfiero a los dispositivos. Cuando la aplicación se ejecuta a través de AndroidStudio -> RunApp en un dispositivo USB conectado la aplicación funciona.
- Cómo eliminar la aplicación de los listados de aplicaciones en la Consola para programadores de Android
- ¿Cómo mostrar una vista vacía con RecyclerView?