LoginSignup
58
45

More than 5 years have passed since last update.

Kotlin Android ExtensionsでfindViewByIdとさよなら

Posted at

こんにちはsekitakaです。

JavaのAndroid開発でButterknifeを使っていたのでKotlinではKotterknifeを使おうと思ったのですが、ちょっとぐぐってみたところKotlinには
Kotlin Android Extensionsという、Android用の拡張機能があったので使い方を共有します。

なにができるの

Android開発をしているとfindByIdをキャスト付きで書く事が多いですが、それを省略できます。

Kotterknifeにくらべて何がいいの?

layout.xmlに対応する特殊なパッケージをimportするだけで、Activityのコードではクラス変数としてアクセスできます。変数名はxmlで指定したidです。よってコードの記述量が少なくてすみidと変数名も一致して分かりやすいコードになります。またキャストするために型を記述する必要もありません。

一方Kotterknifeは以下のようにActivityのクラス変数としての宣言が必要です。
val firstName: TextView by bindView(R.id.first_name)

使い方

build.gradle

appのbuild.gradleに以下を追記します。

buld.gradle
apply plugin: 'kotlin-android-extensions'

コード

layout

activityのレイアウトactivity_hoge.xmlに以下のtextviewがあるとします。(includeされた別のファイルでもよい)

activity_hoge.xml
<TextView
    android:id="@+id/myTextView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>

activity

Activityのktファイルでactivity_hoge.xmlのView要素を使用するために以下のようにパッケージをインポートします。

import kotlinx.android.synthetic.main.activity_hoge.*

それ以外の宣言などは必要なく、onCreateではいきなり以下のようにidで指定した変数名でTextViewにアクセスすることができます。
Android Studioでは入力補完も効きます。ナイス!

HogeActivity.kt
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_hoge)
    myTextView.text = "aa" // idで指定したmyTextViewという名前でアクセスできる
}

OnClickはどうかくの?

Butterknifeではアノテーションでクリック時の処理をわかりやすく関数化できましたが、Kotlin Android ExtensionやKotterknifeでは出来ないようです。ただラムダ式が簡単に記述できるので、まぁいいかなという感じはします。

hogeButton.setOnClickListener {
    // クリック時の処理
}

Adapterとかでも使える?

RecyclerViewのAdapterなどでも使えます。しかもこちらも入力補完が効きます。
Adapter内にViewHolderクラスを持つ構成の場合、AdapterのKotlinファイルで以下のようにAdapter内ではview.*としてインポートすれば良いです。

import kotlinx.android.synthetic.main.<アイテム用のxml>.view.*

まとめ

Viewへの変数の定義などはただの定形作業なので、そのあたり省略できるのがいいですね。
これからKotlin開発では使っていこうと思います。
とはいえ、ButterknifeのアノテーションでのOnClickとか結構気に入ってたのだが。。。

58
45
0

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
58
45