2017-07-07 26 views
3

したがって、私はKotlinでリスナーを作成しようとしています。私はちょうど私のコードで後者が実行されるメソッドを渡すしたい。Kotlinで関数を変数として宣言する方法

override fun setButtonClickListener(listener: (text: String) -> Unit) { 
    this.listener = listener 
} 

しかし、私は自分のリスナーを宣言するとき、私はこのようにそれを宣言する必要があります:このような

private var listener : (text: String) -> Unit = null!! 

そうでなければ、私のASは文句を言うでしょう。しかしこれは !!ヌルオブジェクトの継ぎ目ではとても奇妙です。どのようにこのリスナーを宣言する必要がありますか?

ありがとうございます!

答えて

8

kotlinの変数として関数を宣言する方法は数多くあります。

ます。たとえば、以降でプロパティを初期化する lateinit propertiesを使用することができ

private lateinit var listener : (text: String) -> Unit 

ORlistener NULL可能を作るが、あなたがsafe-callとそれを呼び出す必要があります:listener?.handle(...)をこのように:

private var listener : ((text: String) -> Unit)? = null 

またはは、NPExceptionを避けるために空のラムダで宣言します。 :

private var listener : (String) -> Unit = {} 

ORプライベート関数を宣言した後、あなたは、たとえば、function reference expressionことによってそれを参照することができます。

private var listener = this::handle 

private fun handle(text:String) = TODO() 

:あなたは関数の変数を宣言するときに、パラメータ名がありますオプション:たとえば、

+0

おかげのような私のインターフェース!私はうまく動作します。ドキュメントでこれを見つけるのは難しいです... –

+0

@LeandroBorgesFerreiraまったくありません。 –

0

これは私の方法です。

fun setOnCardClickListener(listener: OnCardClickListener){ 
    this.listener = listener 
} 

adapter.setOnCardClickListener(object : OnCardClickListener { 
     override fun onClick(link: String) { 



     } 
    }) 

この

interface OnCardClickListener { 

    fun onClick(link: String) 

} 
関連する問題