Это действительно интересная ситуация. У меня есть android пользовательский вид. У него есть свойство 'state' для изменения состояния рисования флажка на основе этого свойства. Как видите, это свойство объявлено как необнуляемое, и я инициализирую его значением по умолчанию «State.Regular».
class SomeCustomView @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = 0
) : AppCompatCheckBox(context, attrs) {
sealed class State {
object Regular : State()
object Specific : State()
}
// todo: it will be nice to implement statesaving
// but it's okay for now
var state: State = State.Regular
set(value) {
field = value
refreshDrawableState()
}
override fun onCreateDrawableState(extraSpace: Int): IntArray =
super.onCreateDrawableState(extraSpace + 1).apply {
val stateAttrRes = when(state) {
State.Specific -> R.attr.some_custom_view_specific
State.Regular -> R.attr.some_custom_view_regular
}
View.mergeDrawableStates(this, intArrayOf(stateAttrRes))
}
}
Но когда мы собираемся использовать это представление, оно падает с этим исключение:
kotlin.NoWhenBranchMatchedException
Я пытался отладить выражение when, и я заметил, что внутри метода onCreateDrawableState он не инициализируется значением по умолчанию State.Regular, но имеет значение null, и вот почему у нас есть это NoWhenBranchMatchedException.
Есть ли у вас какие-либо идеи, почему это свойство инициализируется нулем и как это исправить?