Runnable no se ejecuta en la barra de acción flotante en Android

He intentado que la fábrica gire y cambie su icono, pero por alguna razón Runnable no funciona en absoluto.

Aquí está el código:

 private val handler: Handler = Handler() private var isRotate: Boolean = false private val rotate: Animation = RotateAnimation(0.toFloat(),90.toFloat(),0.toFloat(),0.toFloat()) private val r: Runnable = Runnable { fun run() { if (isRotate) { fab2.setImageDrawable(ResourcesCompat.getDrawable(resources, R.drawable.ic_menu_camera, null)) isRotate = false } else { fab2.setImageDrawable(ResourcesCompat.getDrawable(resources, R.drawable.ic_menu_gallery, null)) isRotate = true } } } override fun onCreate(savedInstanceState: Bundle?) { ... rotate.duration = 1000 rotate.repeatCount = 0 rotate.repeatMode = Animation.REVERSE rotate.fillAfter = true fab2?.setOnClickListener { view -> ObjectAnimator.ofFloat(view,"rotation",0.toFloat(),90.toFloat()).setDuration(800).start() view.handler.postDelayed(r,400) } } 

El button gira, pero el icono no cambia, lo que implica que OnClickListener funciona, pero Runnable no.

¿Cómo hago que esto suceda?

Estás declarando tu Runnable de una manera incorrecta. La expresión lambda que declaras es en realidad la function run() y declaras dentro otra function run() .

La forma correcta de declarar tu object debería ser:

 private val r: Runnable = object: Runnable { override fun run() { if (isRotate) { fab2.setImageDrawable(ResourcesCompat.getDrawable(resources, R.drawable.ic_menu_camera, null)) isRotate = false } else { fab2.setImageDrawable(ResourcesCompat.getDrawable(resources, R.drawable.ic_menu_gallery, null)) isRotate = true } } } 

O (expresión lambda):

 private val r: Runnable = Runnable { if (isRotate) { fab2.setImageDrawable(ResourcesCompat.getDrawable(resources, R.drawable.ic_menu_camera, null)) isRotate = false } else { fab2.setImageDrawable(ResourcesCompat.getDrawable(resources, R.drawable.ic_menu_gallery, null)) isRotate = true } } 
  • ¿Qué significa ". ()" En Kotlin?
  • onCreate en la actividad padre abstracta no llamada en kotlin
  • Configurando Gradle con Kotlin
  • Teclear argumento no reconocido en Kotlin
  • Anotación del calificador personalizado Moshi en Kotlin
  • IntelliJ (usando gradle): no se puede encontrar el complemento de Kotlin aunque esté instalado
  • Location.distanceTo devuelve valor en metros pero necesito pies
  • Overriding val definido en la interfaz mediante el uso de var con el mismo nombre definido en la superclass
  • La class genérica de extensión Y implementa la interfaz en Kotlin
  • Kotlin no puede inferir el tipo cuando utiliza la reference de método en Flowable
  • Los elementos de vista de Android NavigationView Headerlayout no están activando events de clic