How I can use callback in Kotlin?
I have View and one CircleShape , which should show toast in this View. And I use it in main Activity. This is my interface
interface OnClickListenerInterface {
fun onClick()
}
It is CircleShape( it is View in my xml) and listener in my View. I want to implement OnClick in my Activity.
var listener: OnClickListenerInterface? = null
mCircleShape.setOnClickListener(View.OnClickListener {
if (listener == null) return@OnClickListener
listener!!.onClick()
})
I know , that in Kotlin getters and setters generic automatics, but how I can set listener if it private. It is code from my Activity, but It doesn't work
CircleShape.listener = object :OnClickListenerInterface{
override fun onClick() {
ToastUtils.showSuccessMessage(getContext(),"pressed")
}
}
How I should to use Callback, onClickListenere in Kotlin?
Solution 1:
A more simpler solution by using lambda.
Inside CircleShape.kt, declare a lambda function.
var listener: (()->Unit)? = null
...
// When you want to invoke the listener
listener?.invoke()
Inside your Activity
mCircleShape.listener = {
// Do something when you observed a call
}
Solution 2:
define a function like this:
fun performWork(param1: String, myCallback: (result: String?) -> Unit) {
// perform some network work
// on network finished
myCallback.invoke("result from network")
}
use like this:
performWork("http://..."){ result ->
//use result
}