没有主构造函数,类扩展 AppCompatImageView 超类型初始化是不可能的

问题描述

一个扩展 AppCompatimageView 的自定义 Imageview 类

显示错误没有主构造函数就不可能进行超类型初始化

class ImageViewVasl : AppCompatimageView() {
    constructor(context: Context) : super(context) {
        initialize(context = context,attrs = null)
    }
    constructor(context: Context,attrs: AttributeSet?) : super(context,attrs) {
        initialize(context = context,attrs = attrs)
    }
    constructor(context: Context,attrs: AttributeSet?,defStyleAttr: Int) : super(
        context,attrs,defStyleAttr
    ) {
        initialize(context = context,attrs = attrs)
    }
    private fun initialize(
        context: Context?,attrs: AttributeSet?
    ) {

    }
}

解决方法

试试:

class ImageViewVasl() : AppCompatImageView(){
  constructor(context: Context) : this(context) {
        initialize(context = context,attrs = null)
    }
  ...
}

或:

class ImageViewVasl: AppCompatImageView{
    constructor(context: Context) : this(context,null)
    constructor(context: Context,attrs: AttributeSet?) : this(context,attrs,0)
    constructor(context: Context,attrs: AttributeSet?,defStyleAttr: Int) : super(context,defStyleAttr) {
        ...
    }
}
,

你需要调用父的构造函数:

class PieChart(context: Context,attrs: AttributeSet) : View(context,attrs)

在您的源代码中,我看不到您在哪里调用父级的构造函数。 此链接中的更多详细信息:https://developer.android.com/training/custom-views/create-view

,

在 AppCompatImageView() 之后删除 (),就像这样

class ImageViewVasl : AppCompatImageView {
...
...
}