自定义AppCompatEditText报错:无匹配构造函数可调用
问题原因
AppCompatEditText仅提供三个构造函数重载:
AppCompatEditText(Context)AppCompatEditText(Context, AttributeSet?)AppCompatEditText(Context, AttributeSet?, Int)
你的主构造函数试图调用父类不存在的四个参数构造方法,这就是报错的核心原因。
修正方案
调整主构造函数,仅调用父类已存在的构造,同时通过Kotlin默认参数简化次级构造:
class MyField( context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = R.attr.editTextStyle ) : AppCompatEditText(context, attrs, defStyleAttr) { constructor(context: Context) : this(context, null) constructor(context: Context, attrs: AttributeSet?) : this(context, attrs, R.attr.editTextStyle) }
如果不需要额外的构造逻辑,甚至可以直接省略次级构造,利用Kotlin默认参数自动生成对应重载:
class MyField( context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = R.attr.editTextStyle ) : AppCompatEditText(context, attrs, defStyleAttr)
关于defStyleRes的补充
若需处理defStyleRes参数,AppCompatEditText并未开放对应的构造入口,你可以在类内部通过obtainStyledAttributes方法读取属性时传入该参数,自行实现样式逻辑。
内容的提问来源于stack exchange,提问作者SmartASCII
相关产品推荐
相关产品推荐

