Est-ce que quelqu'un pourrait me montrer ce qui ne va pas, j'essaie d'utiliser un Handler
poster un Runnable
mais ce n'est pas exécuté
var mHandler: Handler? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
mHandler = Handler()
var runnable = Runnable {
Log.d("TEST", "++++ runable")
Log.d("TEST", "++++ come end")
}
Log.d("TEST", "++++ runnable" + runnable)
Log.d("TEST", "++++ handle" + mHandler)
mHandler!!.post { runnable }
}
Ceci est la sortie
09-21 00: 56: 04.067 4419-4419 /? D/TEST: ++++ runnablecom.vpioneer.activity.MainActivity$onCreate$runnable$1@529b8fb4 09-21 00: 56: 04.067 4419-4419 /? D/TEST: ++++ handleHandler (Android.os.Handler) {529b8cb4}
Tout d’abord, n’utilisez pas l’opérateur !!
, c’est une très mauvaise pratique (du doc ). Avec ?
vous obtiendrez le même comportement mais en vérifiant si l'instance est devenue nulle avant de l'exécuter.
En disant cela, en utilisant:
mHandler?.post { runnable }
Vous créez actuellement un nouveau lambda contenant une ligne exécutable. voir ci-dessous d'une manière plus lisible:
mHandler?.post {
runnable
}
C'est l'équivalent en Java:
mHandler.post(new Runnable(){
public void run(){
runnable;
}
});
Pour résoudre ceci:
Option 1: se débarrasser de la déclaration exécutable
mHandler?.post { /*the content of your runnable*/ }
Option 2: en utilisant votre instance exécutable
mHandler?.post(runnable) // normal parentheses
Option 3: façon folle
mHandler?.post { runnable.run() }
Vous ne commencez pas runnbale
. Essaye ça:
mHandler!!.post { runnable.run() }
Ceci est également valable:
mHandler!!.post {
Log.d("TEST", "++++ runable")
Log.d("TEST", "++++ come end")
}
Essayez ce code, j'espère que cela fonctionne
Handler().postDelayed({
// You code and delay time
}, 1000L)