2017-08-02 18 views
0

におけるリターンの使用は、このリスナーのコードを考えてみましょう:はKotlinにAndroidのリスナーを設定する - ラムダ

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

それは動作しません、と私は「リターンがここで許可されていません」というエラーフォームのIDEを取得しています。私は少しを検索したと明示的なリターンがラムダでは動作しないことが判明したが、私は使用しようとしていますメソッドのシグネチャは次のとおりです。

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} 
関連する問題