サンプルを見ると、Android Architecture Componentsを使用してMVVMへの2つのアプローチが見られました。ViewModel + Data Bindingのベストプラクティスとパターン。 ViewModelのObservableFieldは問題ありませんか?
最初のアプローチ:Activity
と呼ばれる観察者がViewModel
ObservableField
にデータを設定された場合
ViewModel
がLiveData
- に
LiveData
Activity
加入を提供します。ViewModel
全体を結合に通す。私はViewModel
でlistLoading
ObservableField
などを更新するように私は、状態(例えば、 "ロード")を渡す必要はありません:は
xml
であなただけの値としてObservableField
<ProgressBar android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" app:visibleGone="@{viewmodel.listLoading}"/> <android.support.v4.widget.SwipeRefreshLayout android:id="@+id/swiperefresh" android:layout_width="match_parent" android:layout_height="match_parent" app:refreshing="@{viewmodel.listRefreshing}" app:onRefreshListener="@{() -> viewmodel.refreshList()}" app:visibleGone="@{!viewmodel.listLoading}">
賛否を設定しましたこの:
val listLoading = ObservableBoolean(false)
/** other observable fields go here **/
val list: MutableLiveData<List<Item>> = MutableLiveData()
fun loadList() {
listLoading.set(true)
repo.getList { items ->
list.value = items
listLoading.set(false)
}
}
短所:このアプローチに問題はありますか?
第二のアプローチ:観察者はActivity
が
ViewModel
がLiveData
- に
LiveData
Activity
加入を提供するには、
長所:このアプローチの賛否両論?
短所:状態はViewModel
から返されます。このsample from Googleのデータは、Resource
オブジェクトにラップされています。
最初のアプローチは、私はAndroidのデータバインディングとAndroidアーチコンポーネントでの作業より多くの経験を持つ開発者からの両方のパターンの長所と短所が何であるかを知っていただきたいと思いanother sample app from Google
に使用されています。
これらの質問の最後の言葉ですか?私は第2のアプローチを使用したいが、まだ混乱している。どんな助け? – iMDroid