2017-08-02 26 views
0

收益的使用考虑这个监听器代码:设置在科特林Android的听众 - 在lambda表达式

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

但是,这是正确的或至多K otlin的方式来做到这一点?我将如何将我的听众代码更改为而不定义一个返回布尔值的单独函数?

回答

1

就这样来做,没有反馈字

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