LoginSignup
0
3

More than 5 years have passed since last update.

Android DataBinding 始まり編

Posted at

はじめに

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

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を追加します。

修正前: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>
修正後: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の修正が楽になります。

修正前:MainActivity.kt
...

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
    }
}
修正後: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はコメントアウトして新たに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にアクセスして操作する

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

0
3
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
0
3