如何在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") } )