[Kotlin] ボタンの処理側コード各種

本文上広告1



nyan さんのコードを参考に、自分でKotlinに書き換えて実装しながら、勉強をすすめています。

結論

  • JavaからKotlinだけに変えただけとは言えないぐらい勉強になった。
  • Kotlin Android Extensionsは使わな損。
  • Kotlinで継承の書き方がわかった
  • Kotlinでオブジェクト指向するために文法を勉強するべし。

実装各種 (3つ)

ボタン2つと、TextViewが1つある前提で話をすすめています。

UIは下記のボタンを参照にしてください。

Andrdoid 3.3の画面をもとに作成しています。 前回はHello Worldを表示するまでの流れを実際にやってみました。 ...

setOnClickListner直打ち

Kotlin Android Extensionsを使っているおかげで、もうこれだけでよくないか?ってぐらいにシンプルになっています。

import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import kotlinx.android.synthetic.main.activity_main.*


class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        button_1.setOnClickListener {
            textView.setText(R.string.hello)
        }

        button_2.setOnClickListener {
            textView.setText(R.string.world)
        }
    }
}

object

実はjavaから変換して何とか使える形にはしましたが、2つめの画像のように怒られています。ラムダ式にしてね的な何かを言われていますが、まだまだ勉強中の身なのでこれ以上は改良できておりません。宿題かも。

import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import kotlinx.android.synthetic.main.activity_main.*
import android.view.View

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        button_1.setOnClickListener(buttonClick)
        button_2.setOnClickListener(buttonClick)
    }

    private val buttonClick = object : View.OnClickListener {
        override fun onClick(view: View) {
            when (view.id) {
                R.id.button_1 -> textView.setText(R.string.hello)
                R.id.button_2 -> textView.setText(R.string.world)
            }
        }
    }

継承を使用する

View.OnClickListenerを継承して、onClick()をoverrideする。結構すっきりかけるので、良。

import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import kotlinx.android.synthetic.main.activity_main.*
import android.view.View


class MainActivity : AppCompatActivity() , View.OnClickListener {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        button_1.setOnClickListener(this)
        button_2.setOnClickListener(this)
    }

    override fun onClick(view: View) {

        if( R.id.button_1 == view.id ) {
            textView.setText(R.string.hello)
        }
        else if (R.id.button_2 == view.id) {
            textView.setText(R.string.world)
        }
    }
}

宿題

Kotlinのラムダ式等について今後調べること。(何気に使ってはいるのだろうけど、overrideとか絡むとドッと焦るし、メッキがはがれるww)

Kotlinの文法についてザックリ見ておくこと。これとか。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする