カッコつけすぎに注意
ときどき setOnClickListener の省略しない使い方がわからなくなるので復習。
こういうのを時々書いて、忘れないようにしなければならない。
ところで、これをやりながら気づいたのだが、次のものは機能しない。
では、波カッコでないふつうのカッコ()はどうなのだろう。
3か所のカッコについて余計につけてみたが、これは機能する。ところが、次のようにすると・・・
うまくいくところとうまくいかないところが入り混じる。 多分、もとの関数の変数と、カッコを増やしたことで変数の形が違うからなのか・・・と推測するが、でも関数のカッコを 増やしてもうまくいくところもあるし・・・これもよくわからない。
ということで、やっぱりよくわからないまま終わるのだけど、余計なカッコつけはしなければ問題ないと。
class Listener: View.OnClickListener { override fun onClick(p0: View?) { findViewById(R.id.text1).text = "ボタンが押された" } } val listener = Listener() findViewById(R.id.button1).setOnClickListener(listener)
ところで、これをやりながら気づいたのだが、次のものは機能しない。
findViewById(R.id.button1).setOnClickListener({view,View -> { findViewById(R.id.text2).text = "ボタンを押した"}})ボタンは押せるけど、テキストが変わることはない。 なぜかというと、波カッコ({})が二重になっているから。つまり次が正解。
findViewById(R.id.button1).setOnClickListener({view,View -> findViewById(R.id.text2).text = "ボタンを押した"})従って、これなんかも動かない。
findViewById(R.id.button1).setOnClickListener {{ findViewById(R.id.text2).text = "ボタンを押した"}}例によって理由はよくわからないけど、波カッコはただまとめるだけじゃなくて、その中に あるものをちょっと違うものにしてしまう働きもあるのだろう。
では、波カッコでないふつうのカッコ()はどうなのだろう。
findViewById((R.id.button5)).setOnClickListener(({ view:View -> findViewById((R.id.text5)).text = "ボタン5が押された" }))
3か所のカッコについて余計につけてみたが、これは機能する。ところが、次のようにすると・・・
class Listener: View.OnClickListener { override fun onClick((p0: View?)) { //コンパイルエラー findViewById((R.id.text1)).text = "ボタンが押された" //これはOK。 } } val listener = Listener(()) //コンパイルエラー findViewById((R.id.button1)).setOnClickListener((listener)) //これはOK findViewById(R.id.button4).setOnClickListener((object: View.OnClickListener{ //これはOK override fun onClick((view: View)){ //コンパイルエラー findViewById(R.id.text4).text = "ボタン4が押された" } }))
うまくいくところとうまくいかないところが入り混じる。 多分、もとの関数の変数と、カッコを増やしたことで変数の形が違うからなのか・・・と推測するが、でも関数のカッコを 増やしてもうまくいくところもあるし・・・これもよくわからない。
ということで、やっぱりよくわからないまま終わるのだけど、余計なカッコつけはしなければ問題ないと。
コメント
コメントを投稿