在Kotlin中设置Android监听器 – 在lambdas中使用return

考虑这个监听器代码:

expandable_list.setOnChildClickListener { expandableListView, view, groupPosition, childPosition, l -> Toast.makeText( applicationContext, listDataHeader[groupPosition] + " : " + listDataChild[listDataHeader[groupPosition]]!![childPosition], Toast.LENGTH_SHORT).show() return false} 

这将无法正常工作,而我正在得到“返回不允许在这里”错误形式的IDE。 我已经查了一下,结果显示返回在lambda表达式中不起作用,但我试图使用的方法的签名是:

public final fun setOnChildClickListener(onChildClickListener:((ExpandableListView!, View!, Int, Int, Long) -> Boolean)! : Unit

我的解决方法是定义我的侦听器逻辑在一个单独的函数,返回布尔如下所示:

  private fun myBooleanReturningFun(): Boolean { Toast.makeText( applicationContext, "I work from here", Toast.LENGTH_SHORT).show() return false } 

然后在我的监听器中调用它:

 expandable_list.setOnChildClickListener { expandableListView, view, groupPosition, childPosition, l -> myBooleanReturningFun() } 

但是,这是正确的还是最科特林的方式呢? 我怎么会需要改变我的侦听器代码工作,而不定义一个单独的函数,返回一个布尔值

只要这样做,没有回报的话

 expandable_list.setOnChildClickListener { expandableListView, view, groupPosition, childPosition, l -> Toast.makeText( applicationContext, listDataHeader[groupPosition] + " : " + listDataChild[listDataHeader[groupPosition]]!![childPosition], Toast.LENGTH_SHORT).show() false}