如何在Kotlin中使用回调? [英] How I can use callback in Kotlin?

查看:173
本文介绍了如何在Kotlin中使用回调?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个View和一个CircleShape,它应该在此View中显示吐司.我在主要活动中使用它. 这是我的界面

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()
}

它是CircleShape(在我的xml中是View),在我的View中是侦听器.我想在我的活动中实现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()
    })

我知道,在Kotlin的getters和setters中,泛型的自动变量是有效的,但是我如何设置监听器是否私有.这是我的活动中的代码,但无效

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")
      }
    }

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

How I should to use Callback, onClickListenere in Kotlin?

推荐答案

使用lambda的更简单的解决方案.

A more simpler solution by using lambda.

在CircleShape.kt内部,声明一个lambda函数.

Inside CircleShape.kt, declare a lambda function.

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

您的活动内部

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

这篇关于如何在Kotlin中使用回调?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆