AndroidStudio: DataBinding の使い方

こちらと同じことを行いました。
[【Kotlin/Android Studio】DataBindingの方法！](https://amefure.com/tech/android-data-binding)

## プロジェクトの作成
プロジェクト名: Databinding01

## 環境

```app/build.gradle.kts
（省略）
android {
（省略）
    buildFeatures {
    dataBinding=true
  }
}
（省略）
```

## 画面

```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">

    <data>
        <variable name="user" type="com.example.databinding01.User" />
    </data>

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity">

        <TextView
            android:id="@+id/main_text"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@={user.name}"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

        <Button
            android:id="@+id/done_button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Button"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/main_text" />

        <EditText
            android:id="@+id/edit_nickname"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:ems="10"
            android:inputType="text"
            android:text="nickname"
            app:layout_constraintBottom_toTopOf="@+id/main_text"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

        <TextView
            android:id="@+id/textView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@={user.nickname}"
            app:layout_constraintBottom_toTopOf="@+id/main_text"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/edit_nickname" />

    </androidx.constraintlayout.widget.ConstraintLayout>
</layout>
```

## プログラム
フォルダー構造
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179446/486a08c0-82d1-2f55-8de2-986ff899a098.png)

```MainActivity.kt
package com.example.databinding01

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import androidx.databinding.DataBindingUtil
import com.example.databinding01.databinding.ActivityMainBinding

class MainActivity : AppCompatActivity() {

    private lateinit var binding: ActivityMainBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = DataBindingUtil.setContentView(this, R.layout.activity_main)

        binding.user = User("ame")

        binding.apply {
            doneButton.setOnClickListener{
                user?.nickname = editNickname.text.toString()
                invalidateAll()
            }
        }
    }
}
```

```User.kt
package com.example.databinding01

data class User(
  var name: String = "",
  var nickname: String = ""
)
```

## 実行結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179446/e374749d-c930-add3-7b60-2e08293b4c46.png)