在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}