KotlinでAndroid開発! Kotlin Android ExtensionsでfindViewByIdにサヨナラする


Kotlinというプログラミング言語を用いたAndroid開発が注目を集めています。
本シリーズではKotlin基本を使ったAndroid開発の基本的なところを書いていきます。

何記事かKotlinの基本的な言語仕様の話が続きましたが、今回はよりAndroid開発に即した話です。

Android開発をしたことがあれば、XMLで構造定義したViewの操作をコードから行う場合にfindViewById()を使うということはよくご存知のことかと思います。しかしViewごとにfindViewByIdを繰り返し書く必要があるあたりとか、要キャストとかどうにもイケてません。

そこでKotlin Android Extensionsを使うと見通しの良いコードにできるよ!というのが本稿の内容です。

ちなみに本稿では扱いませんが、同じようにこの問題を解決する手段として

  • Kotter Knifeなどのビューバインディングライブラリを使う
  • AnkoというDSLライブラリを使ってコードベースでViewを定義する

があります。これらの中からプロジェクトに適していると思うものを採用するといいでしょう。

Kotlin Android Extensions

Kotlin Android ExtensionsはKotlin標準プラグインに含まれるプラグインの一つです。これを使うことでコードから楽にViewを操作できるようになります。

導入

Kotlin Android Extensionsを使うには、build.gradle(/app以下の方)に次の1行を追加します。

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'

後はSync Project With Gradle Filesを走らせたらOKです。

使い方

次のようなレイアウトXMLを考えます。

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:id="@+id/helloText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!" />

</FrameLayout>

TextViewはhelloTextというidを持っています。
この時Activityでは次のようにしてこのTextViewにアクセスできます。

...
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {

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

        helloText.text = "Hello, Kotlin"
    }
}

helloTextはMainActivityの拡張プロパティであり、その型はXMLで定義したものになります(つまりキャスト不要)。しかもちゃんとNotNull。
見慣れないimportがありますが、Android Studioの補完機能が足してくれるので難しいところはないはずです。

これで無事findViewByIdにサヨナラすることができました。


Kotlin Android Extensionsの使い方を紹介しました。もし今findViewByIdに悩まされているなら使ってみてください。

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

PAGE TOP