Androidのアプリにてボタンなどを長押しする時の処理とタップしたときの処理を変えたい場合があります。
だいぶKotlinにも慣れてきて、ボタンなどのonClickListenerもラムダ式で書くようにしていますが、表題の通り、Kotlinのラムダ式を使ってonClickListener
とonLongClickListener
を両立するのに躓いたのでメモしておきます。
onClick
イベントは通常returnを持ちませんが、onLongClick
イベントはBoolean
型の戻り値を持ちます。この戻り値をtrue
とするとonClick
とonLongClick
が干渉しなくなります(公式Reference)。
ですが、あれ?ラムダ式の戻り値ってどう書くんだ?となって調べてこちらのサイトのラムダ式の項にて
return 文は使用せず、ラムダ式の末尾に記述した値が評価され、戻り値となる。
とのことだったので、このように実装しました(ボタンのインスタンスはbutton
)。
button.setOnClickListener {
Toast.makeText(this@MainActivity, "OnClick", "Toast.LENGTH_SHORT).show()
}
button.setOnLongClickListener {
Toast.makeText(this@MainActivity, "OnLongClick", "Toast.LENGTH_SHORT).show()
true // trueを返す
}
こちら、最後のtrue
のreturnは
return@setOnLongClickListener true
の省略形のようですね。