У меня есть собственный SurfaceView
, который я хочу отображать в Fragment
, но в тот момент, когда я его добавляю, приложение вылетает.
Пользовательский код SurfaceView
выглядит следующим образом:
public class CameraFocusIndacatorSurfaceView extends SurfaceView implements Runnable {
private final Paint paint;
private final SurfaceHolder mHolder;
private final Context context;
@Override
public void run(){}
public CameraFocusIndacatorSurfaceView(Context context) {
super(context);
mHolder = getHolder();
this.context = context;
paint = new Paint(Paint.ANTI_ALIAS_FLAG);
init();
}
private void init(){
mHolder.setFormat(PixelFormat.TRANSPARENT);
paint.setColor(Color.WHITE);
paint.setStyle(Paint.Style.STROKE);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
//do some stuff
}
}
Приложение вылетает, как только эта строка вызывается в Fragment
, в котором находится SurfaceView
:
View view = inflater.inflate(R.layout.fragment_attachment_upload_camera, container, false);
А вот стек представлений для Fragment
:
Конструктор не подбирается, что ли?
Я вижу, но похоже, что фрагмент не проходит в контексте, я попытался изменить его так, как это было сделано в указанной вами ссылке, но он все еще не работает - я обновил свой пост
Исправлено, просто нужно было изменить второй конструктор перегрузки, чтобы он имел такую же подпись.
Еще раз проверьте мой комментарий и эту ссылку. Вам не хватает параметра AttributeSet
.
Спасибо - теперь он работает
Чтобы быть расширенным из макета, любой пользовательский подкласс
View
должен иметь конструкторpublic
, который принимает в точностиContext
иAttributeSet
.AttachmentUploadCameraFragment
не являетсяContext
, поэтому подходящий конструктор не найден.