翻閱樣本,我看到了2種使用Android Architecture Components的MVVM方法。ViewModel +數據綁定中的最佳實踐和模式。 ViewModel中的ObservableField是否正常?
第一種方法:
ViewModel
提供LiveData
Activity
訂閱了LiveData
- 當觀察者稱爲
Activity
是設置數據到ViewModel
ObservableField
。 - 整個
ViewModel
傳遞到綁定。 在
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}">
優點:我並不需要通過狀態(例如 「加載」),正如我在ViewModel
更新listLoading
ObservableField
爲這樣的:
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)
}
}
缺點:這種方法有什麼缺點嗎?
第二種方法:
ViewModel
提供LiveData
Activity
訂閱了LiveData
- 當觀察者稱爲
Activity
被傳遞到結合 - 僅需要對象(POJO)被傳遞到結合
優點:這種方法的任何優點?
缺點:狀態應從ViewModel
返回。在此sample from Google數據被包裝在Resource
對象中。
第一種方法是使用在another sample app from Google
我想知道什麼是與Android的數據綁定和Android拱門組成的工作更多的經驗,從開發模式兩者的利弊。
關於這些問題的最後一句話?我想使用第二種方法,但仍然困惑。任何幫助? – iMDroid