Как я могу исправить ошибку «Button ().IsEnabled» в моем приложении?

#android #kotlin

#Android #kotlin

Вопрос:

Я пытаюсь создать приложение RNG и хочу отключить мою кнопку, пока работает моя анимация. Это не должно быть слишком сложно, потому что я новичок в разработке Kotlin-приложений.после задержки происходит сбой.

Я уже пробовал другие способы с моей анимацией и попробовал setEnable ().

 button_randomize.setOnClickListener {
    textView_Number.text = (minRangeRandom..maxRangeRandom).shuffled().first().toString()

    textView_Number.animate().setDuration(500).rotationBy(360f)
    Timer().schedule(object: TimerTask(){
         override fun run() {
             button_randomize.isEnabled = false
          }
          },500)
    button_randomize.isEnabled = true
}
  

Я ожидаю, что кнопка рандомизации отключена до завершения анимации. В настоящее время он выходит из строя по завершении задержки.

Комментарии:

1. Журнал сбоев помог бы..

2. попробуйте использовать View.postDelayed на своей кнопке вместо таймера.

Ответ №1:

Вероятно, это потому, что Timer создает новый поток, и ваша TimerTask выполняется в этом новом потоке.
Однако платформа пользовательского интерфейса Android не поддерживает многопоточность. Свойства просмотра могут быть изменены только в основном потоке.

Чтобы исправить это, используйте другой способ задержки. При этом выполняется отложенный код в основном потоке:

 button_randomize.isEnabled = true
button_randomize.postDelayed({
    button_randomize.isEnabled = false
}, 500)
  

Комментарии:

1. Это способ синхронизировать анимацию с жестко запрограммированным обработчиком, это, безусловно, не очень хороший подход.

Ответ №2:

Попробуйте приведенный ниже код.

 textView_Number.animate().setDuration(500).rotationBy(360f)
    .withStartAction {
        button_randomize.isEnabled = false
    }.withEndAction {
        button_randomize.isEnabled = true     
    }
  

Комментарии:

1. К сожалению, это не работает, но спасибо за ваше представление!

Ответ №3:

Вы можете добавить прослушиватель animator, чтобы знать, когда это закончится, вот так

 textview_Number.animate().setDuration(500).rotationBy(360f).setListener(object : Animator.AnimatorListener {
                override fun onAnimationRepeat(animation: Animator?) {}

                override fun onAnimationCancel(animation: Animator?) {}

                override fun onAnimationStart(animation: Animator?) {}

                override fun onAnimationEnd(animation: Animator?) {
                     button_randomize.isEnabled = true
                }
            })
        }