9
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[Android] Kotlinのラムダ式でonClickListenerとonLongClickListenerを両立

Last updated at Posted at 2019-12-15

Androidのアプリにてボタンなどを長押しする時の処理とタップしたときの処理を変えたい場合があります。

だいぶKotlinにも慣れてきて、ボタンなどのonClickListenerもラムダ式で書くようにしていますが、表題の通り、Kotlinのラムダ式を使ってonClickListeneronLongClickListenerを両立するのに躓いたのでメモしておきます。

onClickイベントは通常returnを持ちませんが、onLongClickイベントはBoolean型の戻り値を持ちます。この戻り値をtrueとするとonClickonLongClickが干渉しなくなります(公式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

の省略形のようですね。

9
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?