翻阅样本,我看到了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