Android DataBinding 始まり編

# はじめに

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

```Gradle: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:修正前：activity_main.xml
<?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:修正後：activity_main.xml
<?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の修正が楽になります。

```Kotlin:修正前：MainActivity.kt
...

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
    }
}
```
```Kotlin:修正後：MainActivity.kt
...

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はコメントアウトして新たに２行追記しています。
ActivityMainBindingは先のビルドの際に自動で生成されているはずなので、
Android Studioのコード補完機能を使えば出てくるかと思います。(その際importも追加されるはず)

>ちなみにこのサンプルではActivityMainBindingでしたが、DataBindingするレイアウトファイル名によって\*\*\*Bindingと名前が変わりますので注意を

binding.sampleTextViewはレイアウトファイルに追加したTextViewのidになります。
DataBindingでは定義されたidなどをキャメルケースにするようです。

## 実行結果
ビルドして実行するとただテキストが表示されているだけです。
<img src=https://qiita-image-store.s3.amazonaws.com/0/301495/bc6a30d9-7e7e-00df-0743-55893ec46f34.png width=40%>

# まとめ
DataBindingを使用する基本的な流れは以下になります。
1. build.gradleの追記
2. レイアウトファイルにlayoutタグ追記
3. Bindするwidget等にidを追記
4. ActivityでDataBindingUtil.setContentViewを呼ぶ
5. 4のオブジェクトから各widgetにアクセスして操作する

ここまで出来てしまえば、公式ガイドの上半分は試しながら出来るのではないでしょうか。
下半分は都度必要に応じて見てみることをオススメします。