nyan さんのコードを参考に、自分でKotlinに書き換えて実装しながら、勉強をすすめています。
結論
- JavaからKotlinだけに変えただけとは言えないぐらい勉強になった。
- Kotlin Android Extensionsは使わな損。
- Kotlinで継承の書き方がわかった
- Kotlinでオブジェクト指向するために文法を勉強するべし。
実装各種 (3つ)
ボタン2つと、TextViewが1つある前提で話をすすめています。
UIは下記のボタンを参照にしてください。
[Kotlin] ボタンとテキストのみのシンプルなアプリを作成しながら学ぶ - その2
Andrdoid 3.3の画面をもとに作成しています。
前回はHello Worldを表示するまでの流れを実際にやってみました。
今回はその続きの話から。Javaでの『Android の Button アプリを作ってみる...
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の文法についてザックリ見ておくこと。これとか。