Android Kotlin取消回调

时间:2018-04-23 13:52:28

标签: java android callback kotlin nullable

对于Kotlin来说还是很新的,如果我的活动为空,我试图不回调我的回调。 让我解释一下,我让我的DataManager对某些数据执行异步工作:

fun performWork(callback: ((param1: T, param2) -> Unit)?) { 
   // ... async work with data... 
   // Work is finished, let's call the callback :) 
   // as the callback is optional: 
   callback?.invoke(param1, param2)
}

所以我将我的DataManager调用到我的MainActivity中:

DataManager.performWork(callback = { param1, param2 -> 
  // update the UI now that the work is done. 
}

我想做的是如果回调为空(这意味着活动为空,或者不再在屏幕上,则不会调用回调...)

所以在我的活动中我声明了一个可选的var:

var myCallback: ((params1: T, params2: T) -> Unit)? = null

然后我有一个功能:

  var callbackMain: ((params1: T, params2: T) -> Unit)? = fun (params1: T, params2: T) {

        print("ok")

    }

然后当我调用我的DataManager时:

    mainCallback = this.callbackMain
    DataManager.performWork(mainCallback)
    mainCallback = null

因此异步工作被调用...并且DataManager输入回调因为mainCallback不为空!我认为它的价值是callbackMain。 无论如何我可以让我的回调可以为空吗?所以它不会被调用,而我的DataManager不知道活动?

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您将mainCallback转移为函数performWork的参数。 执行此操作mainCallback = null时,将mainCallback设为null

但是,函数中的param mainCallback仍然不会为空。

您需要做的是将回调注入DataManager,而不是作为函数的参数。然后,当您完成异步工作时,请调用mainCallback?.invoke()

如果要销毁回调,只需将DataManager中的回调设置为null。