MVVM 完全に理解した - 6
MVVM 理解するために、小さいテストアプリを作ってみます。
お題は前回投稿した簡易メモアプリ。
プロジェクトを作る
MVVMPractice とでもしてプロジェクト生成。
Gradle の編集
Data Binding と Architecture Components を有効にするため、app.gradle
に次を追加する。
android { dataBindign { enabled = true } } dependencies { def lifecycle_version = "1.1.1" def design_version = "28.0.0" //Floating Action Button用 implementation "com.android.support:design:$design_version" // ViewModel and LiveData implementation "android.arch.lifecycle:extensions:$lifecycle_version" // optional - ReactiveStreams support for LiveData implementation "android.arch.lifecycle:reactivestreams:$lifecycle_version" // optional - Test helpers for LiveData testImplementation "android.arch.core:core-testing:$lifecycle_version" //AndroidXならこっち //def lifecycle_version = "2.0.0" //implementation "androidx.lifecycle:lifecycle-extensions:$lifecycle_version" //implementation "androidx.lifecycle:lifecycle-reactivestreams:$lifecycle_version" // use -ktx for Kotlin //testImplementation "androidx.arch.core:core-testing:$lifecycle_version" }
レイアウトファイルを生成
今回は MemosActivity (Main), AddEditActivity の Activity 2枚、それぞれの主な表示領域を Fragment で構成します。
Activity はいたって普通の構成なので省略、DataBinding は Fragment について行います。
fragment_memos.xml (Main のレイアウト)
<layout xmlns:android="http://schemas.android.com/apk/res/android"> <data> <variable name="viewmodel" type="work.kcs_labo.mvvmpractice.memos.MemosViewModel"/> </data> <android.support.constraint.ConstraintLayout ...> <!--適当--> <ListView android:layout_width="wrap_content" android:layout_height="wrap_content"/> </android.support.constraint.ConstraintLayout> </layout>
fragment_addedit_memo.xml
<layout xmlns:tools="http://schemas.android.com/tools"> <data> <variable name="viewmodel" type="work.kcs_labo.mvvmpractice.addeditmemo.AddEditMemoViewModel"/> </data> <android.support.constraint.ConstraintLayout ...> <EditText android:text="@={viewmodel.title}" android:hint="@string/title" .../> <EditText android:text="@={viewmodel.memo}" android:hint="@string/memo" .../> </android.support.constraint.ConstraintLayout> </layout>
Main画面にはメモ一覧を表示する予定ですが、ちょっとまだわからないので適当にListView
置いてます。
BluePrints のサンプルアプリを読み解いてますが、しんどいので今日はここまで。
todo-mvvm-live-kotlin
ブランチにすると、Android アプリ設計パターン入門の解説とだいぶ違くて解読難航中。。。
分からないところ
~Binding
クラスって、改めて何をするクラス?~Bindig#setContentView
と~Bindig#bind
の動作、機能- テストとかをあまり考えない場合、どこまで実装を簡略化できるのか?