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 } } 
  • Kotlin - IllegalArgumentException en método anulado
  • inyección de guice: diferencia entre getBinding / getExistingBinding / getProvider y getInstance
  • Kotlin: ¿Cómo puedo evitar el autoboxing (basura) en las properties delegadas?
  • Comodines generics en Kotlin para variable
  • Kotlin DSL para crear objects json (sin crear basura)
  • Adjuntar fonts al proyecto de biblioteca de kotlin no aparecen en AS
  • Cómo crear consultas HQL usando campos de class extendida
  • ¿Cómo pasar el tipo anulable a la function que toma un tipo no nulo?
  • Hubo un error al procesar los informes de cobertura en codecov
  • Android Spinner getDropDownView repite elementos después de la selección
  • ¿Cómo delegar la implementación a una propiedad en Kotlin?