Custom View constructor in Android 4.4 crashes on Kotlin, how to fix?

Viewed 2967

I have a custom view written in Kotlin using JvmOverloads that I could have default value.

class MyView @JvmOverloads constructor(
    context: Context,
    attrs: AttributeSet? = null,
    defStyle: Int = 0,
    defStyleRes: Int = 0
) : LinearLayout(context, attrs, defStyle, defStyleRes)

All works fine in Android 5.1 and above.

However it crashes in 4.4, since the constructor in 4.4 doesn't have defStyleRes. How could I have that supported that in 5.1 and above I could have defStyleRes but not in 4.4, without need to explicitly having 4 constructors defined like we did in Java?

Note: The below would works fine in 4.4, but then we loose the defStyleRes.

class MyView @JvmOverloads constructor(
    context: Context,
    attrs: AttributeSet? = null,
    defStyle: Int = 0
) : LinearLayout(context, attrs, defStyle)
3 Answers

Just define the constructors like this:

constructor(context: Context) : super(context)
constructor(context: Context, attrs: AttributeSet) : super(context, attrs)
constructor(context: Context, attrs: AttributeSet, defStyleAttr: Int) : super(context, attrs, defStyleAttr)
@TargetApi(21)
constructor(context: Context, attrs: AttributeSet, defStyleAttr: Int, defStyleRes: Int) : super(context, attrs, defStyleAttr, defStyleRes)
Related