Ошибка раздувания при расширении класса

Я пытаюсь создать собственное представление GhostSurfaceCameraView которое расширяет SurfaceView . Вот мой файл определения класса

GhostSurfaceCameraView.java :

 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(); } } 

И это в моем ghostviewscreen.xml:

 <com.alpenglow.androcap.GhostSurfaceCameraView android:id="@+id/ghostview_cameraview" android:layout_width="fill_parent" android:layout_height="fill_parent"/> 

Теперь в той деятельности, которую я сделал:

 protected void onCreate(Bundle savedInstanceState) { try { super.onCreate(savedInstanceState); setContentView(R.layout.ghostviewscreen); } } 

При setContentView() генерируется исключение:

 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 

Может ли кто-нибудь сказать мне, почему я получаю эту ошибку? Благодарю.

Solutions Collecting From Web of "Ошибка раздувания при расширении класса"

Думаю, я понял, почему это не работает. Я предоставлял только конструктор для случая одного параметра «context», когда я должен был предоставить конструктор для двух аргументов «Context, AttributeSet». Мне также нужно было предоставить доступ к конструктору (-ам). Вот мое исправление:

 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. Оба конструктора не требуются, необходим только конструктор ViewClassName (контекстный контекст, атрибут Attet). Я нашел это болезненным путем, после нескольких часов и часов впустую.

Я очень новичок в разработке Android, но я думаю, что это связано с тем, что, поскольку мы добавляем пользовательский класс View в XML-файл, мы устанавливаем ему несколько атрибутов в XML, что Необходимо обрабатывать во время создания экземпляра. Кто-то, гораздо более осведомленный, чем я, сможет пролить свет на этот вопрос.

Другой возможной причиной сообщения «Ошибка раздувания класса» может быть неправильное написание полного имени пакета, где оно указано в XML:

 <com.alpenglow.androcap.GhostSurfaceCameraView android:id="@+id/ghostview_cameraview" android:layout_width="fill_parent" android:layout_height="fill_parent"/> 

Открытие XML-файла вашего макета в редакторе Eclipse XML должно подчеркнуть эту проблему.

В течение последних нескольких часов у меня была эта ошибка. Оказывается, я добавил пользовательский вид lib в качестве модуля в Android Studio, но я забыл добавить его как зависимость в build.gradle приложения.

 dependencies { ... compile project(':gifview') } 

Важно написать полный путь класса в xml. Я получил «Ошибка раздувания класса», когда было записано только имя подкласса.

У меня была та же проблема, что и расширение TextEdit. Для меня ошибка заключалась в том, что я не добавлял «public» к конструктору. В моем случае это работает, даже если я определяю только один конструктор, тот, который Context аргументы Context и AttributeSet . Проводная вещь состоит в том, что ошибка обнаруживается только тогда, когда я строю APK (поет или нет), и я переношу его на устройства. Когда приложение запускается через AndroidStudio -> RunApp на подключенном к USB устройстве, приложение работает.