首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android MVVM UI控件

Android MVVM UI控件
EN

Stack Overflow用户
提问于 2020-08-06 08:25:58
回答 1查看 840关注 0票数 4

我已经开始在安卓平台上使用LiveData学习MVVM。我认为显示和更新基本数据对我来说是很清楚的。我很难找到一个最佳实践的主题是控制UI。

假设我有一个基本的UI,例如一个表单。它有几个EditTextViews来输入数据。最后,它也有一个开关。如果是ON,则会显示出更多的EditTextViews来填充。当然,当离开时,它们就不见了。

我的问题是在哪里实施这个逻辑?

活动/片段代码中的

  1. ?然后,MVVM的视图部分将涉及业务逻辑(我不认为这一点很好)。

  1. In ViewModel?那么,业务逻辑就会存在于数据缓存中。通过这种方式,我必须在boolean中创建一组ViewModel getter,用于计算不同视图可见性的值。然后,在LiveData更改订阅块中的活动中,我需要读取所有这些值,并设置视图的可见性。

  1. 在一个单独的服务/帮助/Util类中?它将是与#2相同的解决方案,只是从ViewModel.

提取的逻辑。

这里的最佳做法是什么?但是,用户输入验证这个主题也可以提出同样的问题(我想这些领域有很多)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-06 09:33:33

我会采用第二种方法,但使用DataBinding的方式略有不同,灵感来自谷歌的向日葵示例应用程序:https://github.com/android/sunflower --它应该介绍Jetpack的最佳实践,包括MVVM。

然后,在

的活动中,在LiveData更改订阅块中,我需要逐个读取所有这些值,并为视图设置可见性。

不需要这样做,您可以订阅视图模型(使用DataBinding),类似于以下内容:

https://github.com/android/sunflower/blob/master/app/src/main/res/layout/fragment_plant_detail.xml

代码语言:javascript
复制
    <data>
        <import type="com.google.samples.apps.sunflower.data.Plant"/>
        <variable
            name="viewModel"
            type="com.google.samples.apps.sunflower.viewmodels.PlantDetailViewModel" />
    </data>

然后,在布局本身中,根据对没有getter的viewmodel的引用,使用可见性设置。

代码语言:javascript
复制
app:isGone="@{!viewModel.isUnderAge}"

代码语言:javascript
复制
android:visibility="@{viewModel.isUnderAge?  View.VISIBLE : View.INVISIBLE}"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63279628

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档