如何在Kotlin中使用回调?
我有View和一个CircleShape,它应该在这个视图中显示敬酒。 我在主要活动中使用它。 这是我的界面
interface OnClickListenerInterface { fun onClick() }
这是CircleShape(这是在我的XML视图)和监听器在我的视图。 我想在我的Activity中实现OnClick。
var listener: OnClickListenerInterface? = null mCircleShape.setOnClickListener(View.OnClickListener { if (listener == null) return@OnClickListener listener!!.onClick() })
我知道,在Kotlin getters和setters通用自动化,但如何我可以设置监听器,如果它是私人的。 这是我的活动代码,但它不起作用
CircleShape.listener = object :OnClickListenerInterface{ override fun onClick() { ToastUtils.showSuccessMessage(getContext(),"pressed") } }
我应该如何在Kotlin中使用Callback,onClickListenere?
首先你需要删除这个代码:
mCircleShape.setOnClickListener(View.OnClickListener { if (listener == null) return@OnClickListener listener!!.onClick() })
因为侦听器一开始总是空的,而你的代码总是返回。
var listener: OnClickListenerInterface? = null
var listener: OnClickListenerInterface? = null
已经是公开的(这是Kotlin的默认访问级别)。 所以你可以在需要时将其设置在你的活动中。 使用listener?.onClick()
调用来从CircleShape中触发它。
你是否尝试使用lambdaexpression式? 例如在你的情况下:
mCircleShape.setOnClickListener( { _ -> ToastUtils.showSuccessMessage(context,"pressed") } )
或者,如果你想使它更多kotlin风格:
mCircleShape.listener = ( { _ -> ToastUtils.showSuccessMessage(context,"pressed") } )