[DataBindingとは?]
val button:Button = findViewById(R.id.btn1)
//基本的なViewの生成のやり方
普通アプリの画面を作る時、Viewを生成しそのViewに値を入れたり、画像などをセットする
これでも不便ではないし問題ないですが10~個以上のviewがあると思ったら
すごく大変なことになる。
だからDataBindingを使う方がいいと思います。
DataBindingではfindViewById()を使わなくても良いし
自動でxmlで作ったViewを作ってくれる。
あとObservableを用いてリアルタイムでデータの変更も可能になるメリットがあります。
基本 Setting
DataBindingを使うためにまずセッティングが必要!
build.gradle(Module:app)で
android {
...
dataBinding {
enabled = true
}
...
}
apply plugin: 'kotlin-kapt'
...
dependencies {
classpath 'com.android.databinding:compiler:4.x.x' //ここで4.x.xは自分のgradleバージョンに合わせて書く
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" //Kotlinはこの行の追加も必要
}
DataBindingの使い方
DataBindingはxmlから直接作業をする。
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
...
</data>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<Button
android:id="@+id/btnSample"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="button"
/>
</LinearLayout>
</layout>
既存のタグ最上位にタグて包んでタグの中には
xmlで使う変数を タグで作成する。
MainActivity.kt
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = DataBindingUtil.setContentView(this,R.layout.activity_main)
}
MainActivityでも既存のsetContentViewではなく
xmlの名前Bindingと言うクラスが自動で作られます。
'activity_main.xml'だから ActivityMainBindingと言うクラスが作られる。
xmlの変数を参照するには binding.ビューのName で呼ぶことができます。
ボタンのクリックイベントを実装して見よう
MainActivity.kt
fun btnClick(view : View){
Toast.makeText(this,"Button Click",Toast.LENGTH_SHORT).show()
//Todo 自分が実装したい処理を書く
}
既存の場合は下記のように直接リスナーをつけてましたがDataBindingでは
簡単にメソッドを作って使用します。
btnSample.setOnClickListener {
//Todo
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
<variable
name="activity"
type="com.example.databinding.MainActivity" />
</data>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<Button
android:id="@+id/btnSample"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="button"
android:onClick="@{activity::btnClick}
/>
</LinearLayout>
</layout>
タグの中に activityという変数を作成しました。 typeは経路を示しています。
の中にonClickを追加しました。
ここで注意点としては 必ず "@{変数名::メソッド名}" 書かないといけません。
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = DataBindingUtil.setContentView(this,R.layout.activity_main)
binding.activity = this@MainActivity
}
最後にMainActivityで binding.activity(xmlで宣言したvariableのname) にMainActivityを繋げる。
MVVMパタンでは ViewModelを用いてクリックのイベントを処理するようになります
最後に
簡単にDataBindingがどういうものなのか実装して見ました。
応用してもっと快適なアプリを作ってみましょう。
今後 MVVMでの活用方法など記載してみます。
ご覧いただきありがとうございました。