如何在 Kotlin 中使用回调?

2022-08-31 14:04:19

我有视图和一个圆形,它应该在此视图中显示吐司。我在主要活动中使用它。这是我的界面

interface OnClickListenerInterface {
  fun onClick()
}

它是CircleShape(在我的xml中是View)和Lister在我的View中。我想在我的活动中实现 OnClick。

 var listener: OnClickListenerInterface? = null

 mCircleShape.setOnClickListener(View.OnClickListener {
      if (listener == null) return@OnClickListener
      listener!!.onClick()
    })

我知道,在Kotlin getters和setter中通用自动,但是如果它私有,我该如何设置监听器。它是来自我的活动的代码,但它不起作用

CircleShape.listener  = object :OnClickListenerInterface{
      override fun onClick() {
        ToastUtils.showSuccessMessage(getContext(),"pressed")
      }
    }

我应该如何在 Kotlin 中使用 Callback, onClickListenere?


答案 1

通过使用 lambda 实现更简单的解决方案。

在 里面,声明一个 lambda 函数。CircleShape.kt

var listener: (()->Unit)? = null
...
// When you want to invoke the listener
listener?.invoke()

活动内容

mCircleShape.listener = {
    // Do something when you observed a call
}

答案 2

定义一个这样的函数:

  fun performWork(param1: String, myCallback: (result: String?) -> Unit) {
    // perform some network work

    // on network finished
    myCallback.invoke("result from network")
  }

像这样使用:

  performWork("http://..."){ result ->
  //use result
  }

推荐