Android Data Binding

Android Studio でのデータ バインディング コードのサポートなど、Data Binding Library を使用できる開発環境を整える方法を説明します。

Step 1. データ バインディングを有効にする:

プロジェクトでデータ バインディングを使用するには、アプリ レベルの build.gradle ファイルで有効にする必要があります。

dataBinding {
enabled = true
}

Step 2. レイアウト ファイルをデータ バインディングで使用できるように変更します。

式言語では、レイアウト内のビューに変数を接続する式を記述することができます。 データ バインディング ライブラリは、レイアウト内のビューをデータ オブジェクトとバインドするために必要なクラスを自動的に生成します。 このライブラリは、レイアウトで使用できるインポート、変数、およびインクルードなどの機能を提供します。

データ バインディングを使用するレイアウトでは、レイアウトの一番上のビューは <layout> ビューでなければならず、言い換えれば、次のように <layout> タグでレイアウト全体をラップする必要があります:

<layout>
<ConstraintLayout… /> <! - UI layout's root element →
</layout>

他のクラスまたはオブジェクトからデータを使用するには、レイアウト ファイル内でデータ オブジェクトを作成して、そのクラスまたはオブジェクトの変数を宣言しなければならない。

<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<variable
name="user"
type="com.myapp.data.User" />
</data>
<ConstraintLayout… /> <! - UI layout's root element →
</layout>

エラーを避けるために、すべてのパッケージ名は小文字のアルファベットで始まり、すべてのデータ クラスの名前は大文字のアルファベットで始まる必要があります。 アクティビティ/フラグメントにバインド オブジェクトを作成する:

Now its time to connect our layout to activity/fragment using data-binding.

Create a binding object in the file:
The type of binding is derived from the name of the layout file.e.g if the layout file’s name was activity_main.xml の場合、データ バインディングは ActivityMainBinding という名前のクラスを作成し、このファイルには必要なすべてのプロパティと関数が含まれます。

private lateinit var binding: ActivityMainBindingorprivate lateinit var binding: FragmentGameBinding

onCreate() メソッドでバインド変数を初期化する:

Now we have to initialize the binding and replace the existing setContentView () メソッド。 これは、DataBindingUtil クラスを呼び出すか、または直接バインド タイプを使用して行うことができます。

For activity binding type cannot be used.

//for activity (in onCreate())
binding = DataBindingUtil.setContentView(this, R.layout.activity_main)//for fragment (in onCreateView())
binding = DataBindingUtil.inflate(inflater, R.layout.fragment_game, container, false)orbinding = FragmentGameBinding.inflate(inflater)

ステップ4.

  1. findViewById へのすべての呼び出し、またはバインドによる合成インポートだけを置き換える。<ビューの id>.

e.たとえば、レイアウトに id が sample_text のテキスト ビューがある場合、2 つの方法のいずれかでこれを使用する必要があります。

findViewById<TextView>(R.id.sample_text).apply{
text = "dummy text"
}or simply using synthetic importsample_text.text = "dummy_text"

ここで、これは

binding.sampleText.text = "dummy_text"

に置き換えられます。バインド クラスのプロパティ名は、ビューの ID のキャメルケース形式です。 レイアウトのデータオブジェクトで宣言された変数を設定し、レイアウトファイルで使用します。

レイアウトファイルに「user」という変数がある場合

<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<variable
name="user"
type="com.myapp.data.User" />
</data>
<ConstraintLayout… /> <! - UI layout's root element →
</layout>

次に、これを activity/fragment

binding.user = User()

で設定し、ビューデータへの入力に使用することができます。

e.g. ユーザー名を表示するテキスト ビューがある場合、@{} 構文を使って値を設定できます。

<TextView 
...
android:text="@{user.userName}"
...
/>

このように、プログラムでビューを設定するための多くのコードを避け、データ バインディングにそれを任せることができます。

Leave a Reply