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
  }