首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Android mvvm应该在两个视图中使用2个ViewModels,1个ViewModel,还是在父母活动中使用1个?

在Android MVVM架构中,应该根据具体的场景和需求来决定在两个视图中使用2个ViewModels、1个ViewModel,还是在父母活动中使用1个ViewModel。

  1. 使用2个ViewModels:
    • 概念:MVVM架构中,每个视图对应一个ViewModel,通过观察者模式实现数据的双向绑定。
    • 优势:每个视图都有自己的ViewModel,使得视图之间的逻辑和数据相互独立,提高了代码的可维护性和可测试性。
    • 应用场景:当两个视图之间的逻辑和数据相互独立,且需要分别管理和处理不同的数据时,可以使用2个ViewModels。
    • 推荐的腾讯云相关产品:无
  • 使用1个ViewModel:
    • 概念:MVVM架构中,多个视图共享同一个ViewModel,通过观察者模式实现数据的双向绑定。
    • 优势:多个视图共享同一个ViewModel,可以减少代码的重复性,简化逻辑和数据的管理。
    • 应用场景:当多个视图之间的逻辑和数据有较多的共享部分,且需要统一管理和处理时,可以使用1个ViewModel。
    • 推荐的腾讯云相关产品:无
  • 在父母活动中使用1个ViewModel:
    • 概念:MVVM架构中,将ViewModel放在父母活动中,子视图通过观察者模式与ViewModel进行数据的交互。
    • 优势:将ViewModel放在父母活动中,可以实现多个子视图之间的数据共享和交互。
    • 应用场景:当多个子视图之间需要共享和交互数据时,可以将ViewModel放在父母活动中使用1个ViewModel。
    • 推荐的腾讯云相关产品:无

需要注意的是,以上的选择取决于具体的业务需求和设计考虑,没有绝对的标准答案。在实际开发中,可以根据具体情况选择合适的方式来组织和管理ViewModel。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

使用 Architecture Component 实现 MVVM 的正确姿势

还是使用 EventBus?... MVVM ViewModel 充当 View 和 Model 之前数据中转和逻辑处理的角色 image.png ViewModel 的生命周期 ViewModel 的生命周期和创建 ViewModel...,ViewModel 的生命周期是比 Activity 长的,因此我们不应该在 ViewModel 持有 View 或者任何和 Activity context 引用关系的类,否则会引发内存泄露的风险...: // 懒加载,只有使用的时候才初始化,但是还是要保证 Activity.onCreate() 或者 // Fragment.onAttach() 之后再使用 private val viewModel...,这个处理的过程应该放在 ViewModel (可以使用 Transforms) View 层不应该有过多的逻辑代码,逻辑代码应该在 ViewModel 处理好再通知 View 直接更新 UI,View

77920

ViewModels and LiveData- Patterns + AntiPatterns

❌ 不要让ViewModels(和Presenters)知道Android框架类的情况 条件语句、循环和一般决策应该在ViewModels或应用程序的其他层完成,而不是Activities或Fragments...✅将Activity和Fragment的逻辑保持最低限度 View references in ViewModels 视图模型与Activity或Fragment有不同的作用域。...❌ 避免ViewModels对View进行引用。 ViewModels和View之间进行通信的推荐方式是观察者模式,使用LiveData或来自其他库的观察变量方式。...Leaking ViewModels 反应式范式Android运行良好,因为它允许UI和你的应用程序的其他层之间建立一个方便的连接。...ViewModels如何与其他组件通信由你决定,但要注意泄漏和边缘情况。考虑一下这个图,视图使用观察者模式,数据层使用回调。

1.1K30
  • 跨平台开发框架 MvvmCross 初体验

    跨平台开发框架 MvvmCross 初体验 MvvmCross 的特点 尽量使用可移植类库进行编码, 可以包括 视图模型 (ViewModel) 、 模型 (Model) 、 服务 (Service)...甚至界面 (View) 使用 MVVM 模式和数据绑定 (Data Binding) 技术 使用目标平台的本地化界面 框架的任何部分都可以被重写 准备使用 MvvmCross 推荐的方式是建立自己的 git...使用 MvvmCross 创建跨平台应用 MvvmCross 应用至少包含两个项目, 一个是基于 PCL 的 Core 项目, 包含所有的视图模型、 服务以及应用程序逻辑代码; 一个是目标平台的界面项目...添加一个 Setup 类, 负责 MvvmCross iOS 应用的启动, 代码如下: using Cirrious.MvvmCross.Touch.Platform; using MonoTouch.UIKit...这是 MvvmCross 默认的基于约定的命名方式, 在运行时会自动将 FirstView 的 ViewModel 设置为 FirstViewModel 。

    1.3K30

    MVVM项目实战之路-搭建一个登录界面

    本文基于Android Studio3.0 一.MVVM 首先,当然要先简单了解下什么是MVVM开发模式,来看一张图: ?...mvvm.png 可以看出,MVVM,我们的代码结构分为三层: View 这里主要进行视图控件的一些初始设置,不应该有任何的数据逻辑操作 Model 在这层,会定义我们的实体类,以及所有的业务逻辑操作...,比如通过数据库或者网络来操作数据等都应该在这里进行 ViewModel 就像上图一样,ViewModel是连接View与Model的中间桥梁,ViewModel与Model直接交互,处理完业务逻辑后...,之前的xml文件根节点是LinearLayout或者RelativeLayout等布局,但是使用DataBinding后,我们的xml文件可以概括成这样: <?...之前我们已经知道,ViewModel是View与Model层交互的桥梁,所以具体用到的业务数据,比如这里用户名,密码等我这里全部放到了ViewModel,然后将ViewModel与View进行绑定:

    2.2K70

    Android 面试题:为什么 Activity 都重建了 ViewModel 还存在?—— Jetpack 系列(3)

    :数据驱动型界面控制器(本文)[2] 4、Flow:LiveData 的替代方案[3] 5、从 MVC 到 MVP、MVVM、MVI:Android UI 架构演进[4] 6、ViewBinding:新一代视图绑定方案...Activity / Fragment 视图无关的职责抽离出来, MVP 模式叫作 Presenter, MVVM 模式叫作 ViewModel。...关于 MVVM 等模式的更多内容,我们 5、从 MVC 到 MVP、MVVM、MVI:Android UI 架构演进[10] 这篇文章讨论过。...MVVM 模式示意图: MVI 模式示意图: ViewModel 生命周期示意图: 1.2 ViewModel使用方法 1、添加依赖: build.gradle 添加 ViewModel...{ // 使用 Activity 的作用域 private val viewModel : MainViewModel by viewModels() } // Fragment

    1.2K20

    Android 架构」—— MVVM 详解

    —— 使用 架构模式!MVC、MVP、MVVM、...任何一种都要比没有架构设计的流水式代码好得多,MVVMAndroid 开发最好的架构选择之一。...Google 官方也非常支持和鼓励开发者使用这一架构模式。 本教程将为你讲明白到底什么是 MVVM,虽然我也不喜欢理论,但有时候实际操作之前先了解它非常重要,所以请务必耐心看完。... MVVM ,有 3 个固定部分有助于实现关注点分离:models,views 和 view models。...它只负责显示一些东西屏幕上(比如从 ViewModels 拿到的一些数据),执行 Android 特定操作并将用户交互事件(点击、滑动等)发送到各自的 ViewModel。...总结 在这篇文章,你了解了MVVM架构模式背后的概念。现在您已经掌握了基础知识,快开始使用这种模式构建一个真正的应用程序吧?

    1.8K40

    ViewModel 和 LiveData:为设计模式打 Call 还是唱反调?

    ❌ 不要让 ViewModel(或Presenter)直接使用 Android 框架内的类 条件语句、循环和一般的判定等语句应该在 ViewModel 或者应用程序的其他层完成,而不是 Activity...❌ 避免 ViewModel 里持有视图层的引用 推荐使用观察者模式作为 ViewModel 层和 View 层的通信方式,可以使用 LiveData 或者其他库的 Observable 对象作为被观察者...一个很方便的设计 Android 应用的展示层的方法是让视图层(Activity 或 Fragment)去观察 ViewModel 的变化。...由于 ViewModelAndroid 一无所知,它也就不知道 Android 是多么频繁的干掉视图层的小伙伴。...✅ 使用像 SingleLiveEvent 这样的 observable 来处理导航栏或者 SnackBar 显示消息这样的情况 ViewModels 的泄漏问题 响应式范例 Android 运行良好

    3.1K30

    Android 基础面试常常吊死在这几个问题上……

    ARMx86 在这三者中使用最少,因为它对电池不友好。它比其它两个功能强大。... Activity 生命周期中,无论是应用程序启动时,还是Activity 被销毁然后重新创建(例如在配置更改期间)时,都会调用一次 onCreate() 方法。...应聘者:使用 ViewModels 和的组合 onSaveInstanceState() , ViewModel 具有 LifeCycle-Aware 的功能。...通常的做法是将数据存储 ViewModel(因为它在配置更改期间保留数据),并使用 OnSaveInstanceState 存储少量UI数据。 面试官:回答得不错!...因此,该活动理想情况下将实现一个视图界面,从而使单元测试更加容易(因为这将在没有视图的情况下起作用) MVVM 是 Model-View-ViewModel 体系结构。它本质上就是 MVC 的改进版。

    2K20

    Android MVVM框架搭建(一)ViewModel + LiveData + DataBinding

    正文   MVVM框架是有由来的,这个其实说来话长了,还得从最开始的Android 视图、UI来说起。...,是两者不存在耦合性,因此你可以知道ViewModel整个MVVM框架的重要性了。...① 绑定Activity MVVM的框架,每一个Activity都应该对应一个ViewModel,而现在我们有一个MainActivity,因此可以新建一个viewmodels包,包下新建一个MainViewModel...ViewModel定义两个变量 public String account; public String pwd; 账号和密码这当然是最基本的两个数据了,下面我们修改一下activity_main.xml...之前activity_main.xml的data标签使用的User,现在我们改成ViewModel,顺便把布局调整一下,代码如下: <layout xmlns:android="http://schemas.android.com

    15.6K96

    响应式架构最佳实践——MVI

    MVVM Architecture: Model-View-ViewModel架构视图拥有ViewModel的实例,它根据用户的输入/动作调用相应的函数。...总之,MVVM架构最好的部分是ViewModel,但我认为它没有遵循MVC模式定义的Model概念,因为MVVM,DAO(数据访问对象)的抽象被认为是Model,视图观察来自ViewModel的多个可观察属性的状态变化...在下面的架构,我试图结合MVVM和MVI模式的优点,为任何Android项目提供更好的架构,在此基础上,我通过为View和ViewModel创建基类,尽可能多地抽象出一些东西。...如果没有,这个架构的核心思想是,我们MVVM架构包括一个实际的不可变的Model层,我们的视图依赖于这个Model的状态变化。这样一来,ViewModel就必须修改和公开这个单一的Model。...为了避免冗余和简化这种架构多个地方的使用,我创建了两个抽象类,一个用于我们的视图(为Activity、Fragment、自定义视图分开),一个用于ViewModel

    1.7K20

    Android MVVM框架搭建(一)ViewModel + LiveData + DataBinding

    正文   MVVM框架是有由来的,这个其实说来话长了,还得从最开始的Android 视图、UI来说起。...,是两者不存在耦合性,因此你可以知道ViewModel整个MVVM框架的重要性了。...① 绑定Activity MVVM的框架,每一个Activity都应该对应一个ViewModel,而现在我们有一个MainActivity,因此可以新建一个viewmodels包,包下新建一个MainViewModel...ViewModel定义两个变量 public String account; public String pwd; 账号和密码这当然是最基本的两个数据了,下面我们修改一下activity_main.xml...之前activity_main.xml的data标签使用的User,现在我们改成ViewModel,顺便把布局调整一下,代码如下: <layout xmlns:android="http://schemas.android.com

    2.4K32

    分享一个我开发的MVVM架构的开源小项目

    MVVM(Model-View-ViewModel)是一种代码架构模式,被广泛应用在Android程序设计领域,类似的架构模式还有MVP、MVC等。...当然,上述组件你并不一定要全部使用,而是可以选着使用,视自己项目的实际情况选取那些最合适的组件即可。 本篇文章我并不会带着大家一起学习Jetpack的诸多组件,只是做个简单科普而已。.../codelabs/build-app-with-arch-components/index.html 上述链接包括了Google工程师的博客、Android的官方文档、以及两个Google Codelabs...黄色部分表示的是仓库层,仓库层要做的工作是自主判断接口请求的数据应该是从数据库读取还是从网络获取,并将数据返回给调用方。...接下来灰色部分表示是的本地数据层,实现方式并不固定,我使用了LitePal来进行数据持久化处理,你也可以使用别的框架(这里我没有使用官方的Room还是因为Room真的不太好用)。

    78430

    Android面试题之Kotlin Jetpack的三大核心组件

    ViewModel 和 LiveData 是 Android Jetpack 组件库两个核心组件,它们能帮助开发者更有效地管理 UI 相关的数据,并且能够配置变更(如屏幕旋转)时保存和恢复 UI...ViewModel作用 瞬态数据丢失的恢复,比如横竖屏 异步调用的内存泄漏 处理类膨胀提高维护难度和测试难度 使视图和数据能够分离 是介于视图View和数据Model之间的桥梁 LiveData的作用... Activity 或 Fragment 中使用 ViewModel 通过 ViewModelProvider 获得 ViewModel 实例,并观察 LiveData。... Fragment 中使用 ViewModel 如果在 Fragment 中使用 ViewModel,可以使用 viewModels 或 activityViewModels: import android.os.Bundle...同时结合Lifecycle,通过结构化和简化生命周期管理,使得生命周期感知组件 Android 开发更为高效,也有助于减少潜在的内存泄漏和其他生命周期相关的问题。

    13310

    【译】LiveData with Coroutines and Flow

    通常与ViewModels的工作方式有关。 这是一个Android社区相当成熟的惯例,但你会发现有一些文章有不同意见。...有数百篇博客文章以不同的方式定义Presenter、ViewModel、MVP和MVVM。我的建议是,你专注于你的表现层的特性,使用Android架构组件ViewModel。...操作是你应用需要做的任何事情,比如从网络上获取数据、过滤结果或计算一些文本的排列。 对于你创建的任何操作,你需要考虑其范围:从启动到取消的时间范围。让我们看两个例子。...你一个Activity的onStart启动一个操作,你onStop停止它。 你ViewModel的initblock启动一个操作,然后onCleared()停止它。...例如,Android Dev Summit应用程序,我们可以使用

    1.4K10

    Jetpack系列——ViewModel

    其中,MVVM模式除了M层和V层之外,就是VM层,即ViewModel。...Jetpack为开发者提供了ViewModel的概念,将页面所需要的数据从V层和M层剥离出来,ViewModel是介于View层和Model层的一个桥梁,使得视图和数据即区分开来,又能保持联系。...为了证明Activity执行各生命周期时,ViewModel并不会随之变化,所以我们可以ViewModel使用Handler或者RxJava做一个定时循环任务,观测Activity是否会影响ViewModel...接下来,Activity创建出ViewModel实例对象,调用其startHandler()方法开始执行: class ViewModelActivity : AppCompatActivity()...[1240] 上述代码也介绍了最重要的一个点,那就是ViewModel实例的创建,首先需要创建一个ViewModelProvider类对象,其构造方法需要传入Activity实例,androidx

    61610

    高效开发 MVVM 和 databinding 你需要使用的工具

    相信不少同学已经开始使用 MVVM 作为自己 Android 开发架构了,但实际上,我使用过程查阅资料发现,网上有关 MVVM 的资料并不是很多,这主要是因为 MVVM 还是有一定使用门槛的,并且...这就是这两个 Command 做的事了。通过这两个类封装了各种请求参数数量和返回值参数数量的回调方法,使用的时候,只要在泛型里具体指名请求参数和返回值的类型即可,可以说很方便了。...来处理控件的各种事件,这里使用的是无参无返回值的最简单的情况,我们 ViewModel 和 xml 的写法是和之前的接口差不多的: public final ReplyCommand onRefreshCommand...,我们就不需要再写 adapter 了,通过 databinding 的方式, xml 绑定一些属性,并在 ViewModel 对这些属性进行处理即可完成这些控件的处理,逻辑清晰,代码简单。...那么我们的数据是如何刷新的呢,这就要用到上面的items这个属性了,我们这个例子里,它是这样定义的: public final ObservableList viewModels =

    1.2K90

    高效开发 MVVM 和 databinding 你需要使用的工具

    有不少同学已经开始使用MVVM作为自己 Android 开发架构了,但实际上,网上有关 MVVM 的资料并不是很多,这主要是因为 MVVM 还是有一定使用门槛的,并且 MVVM 不一定会帮助你提高开发效率...在里面写具体的onClick实现方法,然后 xml 通过app:setImageOnClick="viewModel.listener"来绑定这个事件。...通过这两个类封装了各种请求参数数量和返回值参数数量的回调方法,使用的时候,只要在泛型里具体指名请求参数和返回值的类型即可,可以说很方便了。...,这里使用的是无参无返回值的最简单的情况,我们 ViewModel 和 xml 的写法是和之前的接口差不多的: 这样,我们所有事件的接口就统一了。...,我们就不需要再写 adapter 了,通过 databinding 的方式, xml 绑定一些属性,并在 ViewModel 对这些属性进行处理即可完成这些控件的处理,逻辑清晰,代码简单。

    65120

    Android SingleLiveEvent Redux with Kotlin Flow

    这篇文章对许多开发者来说是一个很好的起点,因为它让他们思考ViewModels和相关视图(无论是Fragment还是Activity)之间的不同通信模式。 这篇文章可以看这里。...我觉得仍有改进的余地,尤其是使用Kotlin的coroutines和flow时。在这篇文章,我将描述我如何处理一次性事件,以及如何在Android生命周期中安全地观察这些事件。...MVVM模式ViewModel和它相关的视图(Fragment或Activity)之间的通信通常是通过遵循观察者模式来完成的。...这使得视图模型与视图解耦,允许视图经历各种生命周期状态,而不需要向观察者发送数据。 我的ViewModels,我通常会公开两个流来进行观察。第一个是视图状态。这个数据流定义了用户界面的状态。...视图模型构建时立即发射了两个事件。

    99730

    安卓开发的Model-View-Presenter(MVP模式)

    确实,一段时间内,一个非常基础的MVP已经被提出来打破 God-Object (完全负责所有的事情),而且,就在不久之前,谷歌提出的MVVM使用它的体系结构组件,正在被采用(ViewModel, LiveData...对于MVVM,虽然ViewModel不知道View,但是View知道ViewModel,这使得重用具有不同ViewModel视图变得复杂。...像这样,我们可以使用RxJava我们的服务,所以我们可以操作数据与我们所有这个库提供的运营商和LiveData视图的一部分,这将使我们能够使一个实现,意识到我们的活动的生命周期的变化,甚至使用谷歌提供的视图模型...View Android,我们的视图的实现将对应于一个活动或一个片段(示例/项目中是片段),但它可以是一个ViewModel,甚至是一个可视化组件。...这里不讨论视图是由N个片段组成的活动的情况,因为每个片段都有M个演示者,我们可以假设视图是这些片段的每一个,尽管它们随后被分组到一个片段(甚至另一个片段)。

    1.6K30
    领券