Después de consultar especialistas en esta materia, programadores de deferentes áreas y maestros hemos dado con la respuesta al problema y la plasmamos en esta publicación.
Dado que no puede hacer referencia a una lambda en la que se encuentra actualmente, y no puede hacer referencia a la propiedad que está definiendo mientras define la lambda que le está asignando, la mejor solución aquí es una object
expresión:
val runnableCode = object: Runnable
override fun run()
handler.postDelayed(this, 5000)
Suponiendo que esta propiedad no es una var
porque en realidad quieres cambiarlo mientras ocurre esta autollamada.
Simplemente use fixedRateTimer
fixedRateTimer("timer",false,0,5000)
[email protected]
Toast.makeText([email protected], "text", Toast.LENGTH_SHORT).show()
Cambie el retraso inicial configurando otro valor para el tercer parámetro.
Como Kotlin aún no permite lambdas recursivas (consulte KT-10350), debe usar otras construcciones, como expresiones de objetos como en la respuesta de @ zsmb13, o funciones ordinarias como se muestra a continuación
fun StartTimer()
Timer_Preview.postDelayed(Runnable runnable() , 5000)
fun runnable()
//Code here
// Run code again after 5 seconds
Timer_Preview.postDelayed(Runnable runnable() , 5000)
Sin embargo, en su caso particular, parece que podría simplemente llamar StartTimer()
de nuevo para volver a armar el temporizador, asumiendo que no hace nada más:
private val RunnableCode = Runnable
//Code here
//Run code again after 5 seconds
StartTimer()
valoraciones y comentarios
Si para ti ha resultado provechoso nuestro artículo, te agradeceríamos que lo compartas con otros seniors así nos ayudas a dar difusión a este contenido.