Как я могу исправить ошибку "Button (). IsEnabled" в моем приложении? - PullRequest
0 голосов
/ 26 марта 2019

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

Я уже пробовал другие способы с моей анимацией, и попробовал 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
}

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

Ответы [ 3 ]

0 голосов
/ 26 марта 2019

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

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

button_randomize.isEnabled = true
button_randomize.postDelayed({
    button_randomize.isEnabled = false
}, 500)
0 голосов
/ 26 марта 2019

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

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
                }
            })
        }
0 голосов
/ 26 марта 2019

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

textView_Number.animate().setDuration(500).rotationBy(360f)
    .withStartAction {
        button_randomize.isEnabled = false
    }.withEndAction {
        button_randomize.isEnabled = true     
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...