После срабатывания функции программа "вылетает" (лог ошибки привожу)

Лог ошибки и функции, на которые ссылается код (в спойлер не сумел поместить): "Вылетает" если дата не корректна, потому что срабатывает код:

i.setOnFocusChangeListener { viewCurrentNext: View, hasFocus ->
    currentFieldNext = viewCurrentNext as EditText
    if(hasFocus) //проверяется получение фокуса
        currentFieldNext.clearFocus()
}

Но он нужен, чтобы очищать фокус иначе на экране множественные курсоры и в текущем тапнутом поле (в которое вышли), и в том, в которое нужно вернуться (с ошибкой). В эмуляторе во всяком случае так

2021-08-31 16:46:52.759 5686-5686/ru.jurvrn.sid E/InputEventReceiver: Exception dispatching 
input event.
2021-08-31 16:46:52.759 5686-5686/ru.jurvrn.sid E/MessageQueue-JNI: Exception in MessageQueue 
callback: handleReceiveCallback
2021-08-31 16:46:52.806 5686-5686/ru.jurvrn.sid E/MessageQueue-JNI: 
kotlin.UninitializedPropertyAccessException: lateinit property i has not been initialized
    at ru.jurvrn.sid.FirstFragment.getI(FirstFragment.kt:42)
    at ru.jurvrn.sid.MyFunctionsKt.lineChangeOnError(MyFunctions.kt:162)
    at ru.jurvrn.sid.MyFunctionsKt.correctDate(MyFunctions.kt:138)
    at ru.jurvrn.sid.FirstFragment.onViewCreated$lambda-2$lambda-1(FirstFragment.kt:91)
    at ru.jurvrn.sid.FirstFragment.$r8$lambda$qVDIpVYn2xBOG7s8tvHHoUk_z00(Unknown Source:0)
    at ru.jurvrn.sid.FirstFragment$$ExternalSyntheticLambda4.onFocusChange(Unknown Source:2)
    at android.view.View.onFocusChanged(View.java:7265)
    at android.widget.TextView.onFocusChanged(TextView.java:10005)
    at android.view.View.clearFocusInternal(View.java:7101)
    at android.view.View.unFocus(View.java:7134)
    at android.view.ViewGroup.requestChildFocus(ViewGroup.java:813)
    at android.view.View.handleFocusGainInternal(View.java:6926)
    at android.view.View.requestFocusNoSearch(View.java:11546)
    at android.view.View.requestFocus(View.java:11520)
    at android.view.View.requestFocus(View.java:11487)
    at android.view.View.requestFocus(View.java:11429)
    at android.view.View.onTouchEvent(View.java:13764)
    at android.widget.TextView.onTouchEvent(TextView.java:10064)
    at android.view.View.dispatchTouchEvent(View.java:12513)
    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3030)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2719)
    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3030)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2719)
    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3030)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2719)
    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3030)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2719)
    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3030)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2719)
    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3030)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2719)
    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3030)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2719)
    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3030)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2719)
    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3030)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2719)
    at com.android.internal.policy.DecorView.superDispatchTouchEvent(DecorView.java:440)
    at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1830)
    at android.app.Activity.dispatchTouchEvent(Activity.java:3400)
    at androidx.appcompat.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:69)
    at androidx.appcompat.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:69)
    at com.android.internal.policy.DecorView.dispatchTouchEvent(DecorView.java:398)
    at android.view.View.dispatchPointerEvent(View.java:12752)
    at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:5106)
    at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4909)
    at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4426)
    at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4479)
    at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4445)
    at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:4585)
    at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4453)
    at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:4642)
    at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4426)
    at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4479)
    at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4445)
    at android.view.Vie
  2021-08-31 16:46:52.815 5686-5686/ru.jurvrn.sid E/AndroidRuntime: FATAL EXCEPTION: main
  Process: ru.jurvrn.sid, PID: 5686
  kotlin.UninitializedPropertyAccessException: lateinit property i has not been initialized
    at ru.jurvrn.sid.FirstFragment.getI(FirstFragment.kt:42)
    at ru.jurvrn.sid.MyFunctionsKt.lineChangeOnError(MyFunctions.kt:162)
    at ru.jurvrn.sid.MyFunctionsKt.correctDate(MyFunctions.kt:138)
    at ru.jurvrn.sid.FirstFragment.onViewCreated$lambda-2$lambda-1(FirstFragment.kt:91)
    at ru.jurvrn.sid.FirstFragment.$r8$lambda$qVDIpVYn2xBOG7s8tvHHoUk_z00(Unknown Source:0)
    at ru.jurvrn.sid.FirstFragment$$ExternalSyntheticLambda4.onFocusChange(Unknown Source:2)
    at android.view.View.onFocusChanged(View.java:7265)
    at android.widget.TextView.onFocusChanged(TextView.java:10005)
    at android.view.View.clearFocusInternal(View.java:7101)
    at android.view.View.unFocus(View.java:7134)
    at android.view.ViewGroup.requestChildFocus(ViewGroup.java:813)
    at android.view.View.handleFocusGainInternal(View.java:6926)
    at android.view.View.requestFocusNoSearch(View.java:11546)
    at android.view.View.requestFocus(View.java:11520)
    at android.view.View.requestFocus(View.java:11487)
    at android.view.View.requestFocus(View.java:11429)
    at android.view.View.onTouchEvent(View.java:13764)
    at android.widget.TextView.onTouchEvent(TextView.java:10064)
    at android.view.View.dispatchTouchEvent(View.java:12513)
    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3030)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2719)
    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3030)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2719)
    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3030)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2719)
    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3030)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2719)
    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3030)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2719)
    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3030)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2719)
    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3030)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2719)
    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3030)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2719)
    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3030)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2719)
    at com.android.internal.policy.DecorView.superDispatchTouchEvent(DecorView.java:440)
    at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1830)
    at android.app.Activity.dispatchTouchEvent(Activity.java:3400)

Функции:

listOfDates = listOf(date1, date2, date3, date4)
        listOfDates.forEach {
            i -> i.setOnFocusChangeListener { viewCurrent: View, hasFocus ->
            currentField = viewCurrent as EditText

            currentField.addTextChangedListener(object : TextWatcher {
                override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) {}

                override fun beforeTextChanged(s: CharSequence, start: Int, count: Int, after: Int) {}

                override fun afterTextChanged(s: Editable) {
                    when (currentField.text.length) {
                        2 -> currentField.append(".")
                        5 -> currentField.append(".")
                    }
                }
            })

            if(!hasFocus)
                correctDate()
            }
        }



@RequiresApi(Build.VERSION_CODES.O)
fun FirstFragment.correctDate() {
    if (currentField.text.toString().isNotEmpty()) {
        @RequiresApi(Build.VERSION_CODES.O)
        fun parseLocalDateOrNull(text: String, formatter: DateTimeFormatter) = try {
            LocalDate.parse(text, formatter)
        } catch (ex: DateTimeParseException) {
            null
        }

        val dateFormatInput = DateTimeFormatter.ofPattern("dd.MM.uuuu").withResolverStyle(ResolverStyle.STRICT)
        val dateCorrect = parseLocalDateOrNull(currentField.text.toString(), dateFormatInput)
        if (dateCorrect == null) {
            Toast.makeText(requireActivity(), "Некорректная дата! ", Toast.LENGTH_SHORT).show()
            lineChangeOnError()
        } else {
            lineChangeOnTrue()
        }
    }
    else
    {
        currentField.setBackgroundResource(R.drawable.line_bottom_white_back)
    }
}

fun FirstFragment.lineChangeOnTrue(){
    val layerDrawable = ContextCompat.getDrawable(requireActivity(), R.drawable.line_bottom_white_back) as LayerDrawable
    val gradientDrawable = layerDrawable.findDrawableByLayerId(R.id.line_bottom_white_back_id) as GradientDrawable
    gradientDrawable.setColor(Color.parseColor("#ecfff1"))
    currentField.background = layerDrawable
}
fun FirstFragment.lineChangeOnError(){
    val layerDrawable = ContextCompat.getDrawable(requireActivity(), R.drawable.line_bottom_white_back) as LayerDrawable
    val gradientDrawable = layerDrawable.findDrawableByLayerId(R.id.line_bottom_white_back_id) as GradientDrawable
    gradientDrawable.setColor(Color.parseColor("#ffebeb"))
    currentField.background = layerDrawable

    i.setOnFocusChangeListener { viewCurrentNext: View, hasFocus ->
    currentFieldNext = viewCurrentNext as EditText
    if(hasFocus) //проверяется получение фокуса
        currentFieldNext.clearFocus()
    }

    currentField.requestFocus()
}

Ответы (0 шт):