Android ViewModel和x2B中的最佳实践和模式;数据绑定。ViewModel中的ObservableField是否正常?
通过查看示例,我看到了使用Android架构组件实现MVVM的两种方法 第一种方法:Android ViewModel和x2B中的最佳实践和模式;数据绑定。ViewModel中的ObservableField是否正常?,android,design-patterns,android-databinding,android-architecture-components,android-mvvm,Android,Design Patterns,Android Databinding,Android Architecture Components,Android Mvvm,通过查看示例,我看到了使用Android架构组件实现MVVM的两种方法 第一种方法: ViewModel提供LiveData Activity订阅LiveData 当名为“活动”的观察者将数据设置为“视图模型”时 整个ViewModel被传递到binding 在xml中,您只需将observefield设置为值 <ProgressBar android:layout_width="wrap_content" android:layout_height="wrap_conte
ViewModel
提供LiveData
Activity
订阅LiveData
ViewModel
被传递到bindingxml
中,您只需将observefield
设置为值
<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
提供LiveData
Activity
订阅LiveData
活动
被传递给绑定时ViewModel
返回。在这种情况下,数据被包装在资源
对象中
第一种方法用于
<> P>我想知道,有更多经验的Android数据绑定和Android ARCH组件的开发者有哪些优点和缺点。
你应该考虑用业务逻辑拆分视图逻辑。 因为您有一个使用数据绑定和AAC处理的ViewModel,所以您还应该分离视图(布局)中的逻辑
只需将两个变量传递给布局。一个是VievModel,它处理业务逻辑,比如按下按钮并处理逻辑,第二个是视图(片段) 之后你可以使用app:onRefreshListener="@{() -> yourViewFragment.refreshList()}"
如果当前没有订阅视图,请避免出现“上下文泄漏”或不起作用的解决方案
因为onRefreshListener绑定到一个片段,所以可以在片段中传递它
您不应该在ViewModel内创建LiveData或ObservableField来处理此类操作,因为如果暂停并恢复片段,您将再次观察LiveData。这也意味着您将再次获得最后一次交付的数据
可在ViewModel中使用的示例:
<Textview ... name="@{viewModel.dataOfYourModel}" onClick="@{viewModel.doNetworkCall}" />
黄金法则:除了android.arch.*组件之外,以android.*开头的每个包/导入都不应该在viewmodel中 关于这些问题有什么定论吗?我想使用第二种方法,但仍然感到困惑。有什么帮助吗??
<Textview ... name="@{viewModel.dataOfYourModel}" onClick="@{viewModel.doNetworkCall}" />