#はじめに
この記事では私がインプットしたonClickListener
の3つの記法と、そのメリットデメリットを記しています。今回記していくのは3パターンですが、私が恣意的にチョイスしただけで、この3つが全てを網羅している事など無いので悪しからず。
##一つ目:クラス全体に掛かるインターフェースを用いる
MainActivityに実装すると仮定したとき、クラス自体にView.OnClickListener
のインターフェースを参照します。
class MainActivity : AppCompatActivity(), View.OnClickListener {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
button1.setOnClickListener(this)
}
override fun onClick(v: View) {
val b = v as Button
textView.text = "${b.text} is pushed"
}
}
この方法のメリットは、インターフェースから実装するのでミスが減るという事と、冗長なボタン処理をonCreate内に書かずに済むという事、複数のボタンに同じ処理を簡単に実装する事などが挙げられます。ボタンごとに異なる処理を書かないといけないときなどは、かえって分かりにくくなる場合もあるので、考えて使う必要があります。
##二つ目:個々のボタンにメソッドを実装する
各ボタンにsetOnClickListener
メソッドを実装する方法です。
class MainActivity : AppCompatActivity(){
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
button2.setOnClickListener {
val b = it as Button
textView.text = "${it.text} is pushed"
}
}
}
この方法は、複数個のボタンのそれぞれに全く異なる処理を実装させるときに便利です。各ボタンそれぞれに処理を書いていくので、処理が同じ複数のボタンがあるときには向きません。また、各ボタンについて書いていくので、全体としてコードが冗長になりがちです。
#三つ目:変数に処理を代入する
ある変数にView.OnClickListener
を介して処理を実装します。
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val listener = View.OnClickListener {
val b = it as Button
textView.text = "${b.text} is pushed"
}
button3.setOnClickListener(listener)
}
今回はlistener
という変数に処理を記述し、setOnClickListener(listener)
でボタンに適用させています。この方法のメリットは、複数個のボタンに同じ処理を適用させやすい事や、そういったケースが複数種類あるときも簡潔に記述できる事にあります。しかし、処理が複雑になるとonCreate内が冗長になってしまうというデメリットがあります。
#さいごに
今回は以上三つの方法と、そのメリットデメリットについてまとめました。勿論、細かい記法を変えることでさらにスマートに記述できるかもしれませんが、分かりやすさも兼ねてあの状態で記しておきます。意外とクリック処理を体系的にまとめている記事が無かったので、お役に立てれば幸いです。