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の設定をする。
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val binding = DataBindingUtil.setContentView<ActivityMainBinding>(this, R.layout.activity_main) binding.viewModel = MainViewModel() }
これでめでたくActivityを経由しないでxmlを上書きする仕組みができた。
次はLiveDataを絡めて学んで、まず簡単なメモアプリを作りたいですね。