DISCOVERY

日々の備忘録

Android勉強し直す Databinding

業務でAndroidを扱っているが教えてくれる人がいないので、デザインパターンを知らない。

調べてみるとViewModelやらLiveDataやらいろいろ出てきてえらいこっちゃ。。。

https://proandroiddev.com/mvvm-architecture-viewmodel-and-livedata-part-1-604f50cda1

こいつらのやりたいことは基本的にFatActivityをなくすこと。

まさに今こんな感じになってるので、これはぜひ学びたい。。。(ついでにkotlinも)

とりあえずとっつきやすそうなDatabindingから見ていく。

今までxmlで表示する値の変更はActivityからfindviewbyidで調べて〜みたいな処理をいちいち書いていた。

これをViewModelとDatabindingを導入すれば楽になる。

1 build.gradleに追加

dataBinding {
        enabled = true
    }

2 ViewModelを作成

class MainViewModel {
    // 表示が変わる
    var name = ObservableField("aaaa")
}

3 xmlを編集

先ほど作成したviewModelをdataとして指定し、 textの値はそのViewModelのnameを表すことを指定する。

<data>
        <variable
            name="viewModel"
            type="com.example.test.MainViewModel" />
</data>

<TextView
            android:id="@+id/textView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@{viewModel.name}" />

4. mainActivityの編集

最後にviewModelとxmlを繋ぐ処理をする。 通常のsetContentViewではなくDatabindingを利用したContentViewの設定をする。 はbindingの設定をしたxml作成時にxmlの名前を利用したBindingクラスが勝手に作成されているのでそちらを利用する(Activity名ではない)。

android - DataBindingUtil.setContentView - Type parameter T has incompatible upper bounds - Stack Overflow

override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        val binding =
            DataBindingUtil.setContentView<ActivityMainBinding>(this, R.layout.activity_main)
        binding.viewModel = MainViewModel()
    }

これでめでたくActivityを経由しないでxmlを上書きする仕組みができた。

次はLiveDataを絡めて学んで、まず簡単なメモアプリを作りたいですね。