Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Kotlin:如何使用扩展函数延迟运行函数_Android_Kotlin_Postdelayed - Fatal编程技术网

Android Kotlin:如何使用扩展函数延迟运行函数

Android Kotlin:如何使用扩展函数延迟运行函数,android,kotlin,postdelayed,Android,Kotlin,Postdelayed,我试图弄明白如何使用扩展函数来运行任何延迟的方法,但似乎弄不明白 我正在尝试下面的方法,其中我有一个函数,我希望处理程序将执行延迟一定的时间间隔: functionX().withDelay(500) functionY().withDelay(500) private fun Unit.withDelay(delay: Int) { Handler().postDelayed( {this} , delay)} private fun Handler.postDelayed(funct

我试图弄明白如何使用扩展函数来运行任何延迟的方法,但似乎弄不明白

我正在尝试下面的方法,其中我有一个函数,我希望处理程序将执行延迟一定的时间间隔:

functionX().withDelay(500)
functionY().withDelay(500)

private fun Unit.withDelay(delay: Int) {
  Handler().postDelayed( {this} , delay)}

private fun Handler.postDelayed(function: () -> Any, delay: Int) {
  this.postDelayed(function, delay)}

有人吗?

您应该将扩展名放在函数类型上,而不是
单元上

fun functionX() {}
fun functionY() {}

private fun (() -> Any).withDelay(delay: Int) {
     Handler().postDelayed(this , delay)
}
用法:

::functionX.withDelay(500)
::functionY.withDelay(500)

在这里,
::functionX
是名为
functionX

的全局函数的一个示例,您可以声明全局变量,如:

private var handler: Handler = Handler()
private lateinit var runnableNewUrlBackground: Runnable
并将函数声明为全局函数

init {
    runnableNewUrlBackground = Runnable {
        // Your function code here
        myCustomFun();
    }
}
然后,当您想调用此选项时,只需使用:

handler.postDelayed(runnableNewUrlBackground, YOUR_DESIRED_TIME)

另一种方法是声明顶级(即全局)函数,如下所示:

fun withDelay(delay : Long, block : () -> Unit) {
    Handler().postDelayed(Runnable(block), delay)
}
withDelay(500) { functionX() }
然后你可以在任何地方这样称呼它:

fun withDelay(delay : Long, block : () -> Unit) {
    Handler().postDelayed(Runnable(block), delay)
}
withDelay(500) { functionX() }

或者我也喜欢这个版本:

包装要在{…}内执行的任何代码块

{ invokeSomeMethodHere() }.withDelay()
并具有一个扩展函数,在一定延迟后调用Runnable:

fun <R> (() -> R).withDelay(delay: Long = 250L) {

    Handler().postDelayed({ this.invoke() }, delay)
}
fun(()->R).带延迟(延迟:长=250L){
Handler().postDelayed({this.invoke()},delay)
}

谢谢分享!但我今天发现了一个问题。如果在回调中使用它,除非添加
,因为它将前一行视为调用它的表达式的一部分。