19
18

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.

【Kotlin】onClickListenerのパターンとその使い分け方

Posted at

#はじめに
 この記事では私がインプットした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内が冗長になってしまうというデメリットがあります。

#さいごに
 今回は以上三つの方法と、そのメリットデメリットについてまとめました。勿論、細かい記法を変えることでさらにスマートに記述できるかもしれませんが、分かりやすさも兼ねてあの状態で記しておきます。意外とクリック処理を体系的にまとめている記事が無かったので、お役に立てれば幸いです。

19
18
3

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
19
18

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?