はじめに
https://developer.android.com/topic/libraries/data-binding/?hl=ja
がこれ出来るよ、これも出来るよ、こうするよとツラツラと書いてあり、公式ガイド的には正しいと思うが初学の人(自分)みたいな人は???になるので、自身の整理を兼ねたDataBindingの初学者向けの初めてのDataBindingサンプルになります。
環境
Android Studio 3.2.1
Kotlin 1.2.71
DataBindingの始まり
ここから実際に試してみます。
DataBinding設定
まずは適当なプロジェクトを作ります。(ここではDataBindingというプロジェクト)
初回のGradle処理が終わったら以下ファイルに追記していきます。
[プロジェクト名]/app/build.gradle
...
apply plugin: 'kotlin-kapt'
android {
dataBinding {
enabled = true
}
}
変更した後は通知バーの[Sync Now]で同期とビルドを行います。
layoutファイルの修正
layoutタグをConstraintLayoutの前後に追加します。
その際、ConstraintLayoutのxmlns:android, xmlns:app, xmlns:toolsもlayoutタグに移動しておきます。
また、TextViewにidを追加します。
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
</android.support.constraint.ConstraintLayout>
<?xml version="1.0" encoding="utf-8"?>
<layout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto" >
<android.support.constraint.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
android:id="@+id/sample_text_view"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
</android.support.constraint.ConstraintLayout>
</layout>
MainActivityの修正
次にMainActivityを修正していきますが、ここで一度ビルドをしてをきましょう。
ここの時点でエラーがある場合はエラーを解消しておきます。
ビルドをして問題無ければAndroid Studioのコード補完機能が使えるようになるので、
MainActivityの修正が楽になります。
...
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
}
...
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
//setContentView(R.layout.activity_main)
val binding: ActivityMainBinding = DataBindingUtil.setContentView(this, R.layout.activity_main)
binding.sampleTextView.text = "Hello DataBinding!!!"
}
}
setContentViewはコメントアウトして新たに2行追記しています。
ActivityMainBindingは先のビルドの際に自動で生成されているはずなので、
Android Studioのコード補完機能を使えば出てくるかと思います。(その際importも追加されるはず)
ちなみにこのサンプルではActivityMainBindingでしたが、DataBindingするレイアウトファイル名によって***Bindingと名前が変わりますので注意を
binding.sampleTextViewはレイアウトファイルに追加したTextViewのidになります。
DataBindingでは定義されたidなどをキャメルケースにするようです。
実行結果
まとめ
DataBindingを使用する基本的な流れは以下になります。
1. build.gradleの追記
2. レイアウトファイルにlayoutタグ追記
3. Bindするwidget等にidを追記
4. ActivityでDataBindingUtil.setContentViewを呼ぶ
5. 4のオブジェクトから各widgetにアクセスして操作する
ここまで出来てしまえば、公式ガイドの上半分は試しながら出来るのではないでしょうか。
下半分は都度必要に応じて見てみることをオススメします。