2017-08-02 56 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}