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

DialogFragments应该有他们自己的ViewModel,还是应该使用他们包含的片段的ViewModel?

在云计算领域,DialogFragments是一种常见的UI组件,用于显示弹窗对话框。当涉及到使用DialogFragments时,可以选择在其内部使用自己的ViewModel,或者使用包含它们的片段的ViewModel。下面是对这两种选择的详细说明:

  1. 使用DialogFragments自己的ViewModel:
    • 概念:DialogFragments自己的ViewModel是专门为DialogFragments创建的ViewModel对象,用于管理与DialogFragments相关的数据和业务逻辑。
    • 优势:使用DialogFragments自己的ViewModel可以使代码更加模块化和可重用,将DialogFragments的逻辑与它们所依附的片段分离,提高代码的可维护性。
    • 应用场景:适用于需要在DialogFragments中处理复杂逻辑、涉及大量数据操作或需要与其他组件进行交互的情况。
    • 推荐的腾讯云相关产品:腾讯云的Serverless云函数产品(SCF)可用于托管DialogFragments自己的ViewModel的业务逻辑,通过事件驱动的方式实现高度灵活和可扩展的DialogFragments开发。详细信息可参考腾讯云SCF产品介绍:腾讯云Serverless云函数
  • 使用包含DialogFragments的片段的ViewModel:
    • 概念:使用包含DialogFragments的片段的ViewModel是将DialogFragments所依附的片段的ViewModel用于管理DialogFragments的数据和业务逻辑。
    • 优势:使用片段的ViewModel可以减少代码复杂性,避免创建额外的ViewModel,简化数据共享和通信。
    • 应用场景:适用于DialogFragments相对简单,与片段共享数据较多、逻辑较为简单的情况。
    • 推荐的腾讯云相关产品:腾讯云的移动应用托管服务(Mobile App Hosting)可用于轻松托管包含DialogFragments的片段的ViewModel,提供全球范围的高性能托管服务。详细信息可参考腾讯云Mobile App Hosting产品介绍:腾讯云移动应用托管服务

综上所述,选择DialogFragments自己的ViewModel还是使用包含DialogFragments的片段的ViewModel取决于具体场景和需求。对于复杂的业务逻辑和数据处理,建议使用DialogFragments自己的ViewModel来实现更好的模块化和可维护性;而对于简单的情况,使用包含DialogFragments的片段的ViewModel可以简化代码并实现数据共享。腾讯云提供了多种产品和服务来支持DialogFragments的开发和部署,以满足不同需求的云计算应用场景。

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

相关·内容

Android Jetpack - Lifecycles

,它也算是一个生命周期感知组件,但是这种获取生命周期方式和 Lifecycles 比起来还是太 low 了,我们接着对比传统生命周期感知方式,聊一聊为什么使用 Lifecycles 组件 为什么需要...他们应该试图获取自己数据;相反,使用 ViewModel 执行此操作,并观察 LiveData 对象以将更改反映回 UI 尝试编写数据驱动 UI,其中 UI 控制器负责在数据更改时更新视图,或将用户操作通知给...ViewModel 应该充当 UI 控制器和应用程序其余部分之间连接器。但要注意,ViewModel 不负责获取数据(例如,从网络获取)。...相反,ViewModel 应调用适当组件来获取数据,然后将结果提供回 UI 控制器 使用数据绑定来维护视图和 UI 控制器之间干净界面。...这使您可以使视图更具说明性,并最大限度地减少在活动和片段中编写所需更新代码。

1.3K30

ViewModel:持久化、onSaveInstanceState()、UI 状态恢复和 Loader

ViewModel 是 onSaveInstanceState 替代品吗? 简而言之,不是,但是他们不无关联,请继续读。 我如何高效地使用 ViewModel 来保存和恢复 UI 状态?...一旦相关联 UI 控制器(fragment/activity)被销毁或者进程停止了,ViewModel 和所有被包含数据都将被垃圾回收机制标记。...每一种都会存储 activity 中使用不同数据: 本地持久化是用于存储当打开或关闭 activity 时所有你不想丢失数据。 举例: 包含了音频文件和元数据所有音乐对象集合。...在音乐搜索例子中,不同事件应该被这样处理: 用户添加一首音乐时候 — ViewModel 会迅速代理本地持久化这条数据。...当用户搜索音乐时候 — 任何从数据库为 UI 控制器加载复杂音乐数据应该马上存入 ViewModel。你也应该将搜索查询本身存入 ViewModel

3.7K30

ViewModel:持久化、onSaveInstanceState()、UI 状态恢复和 Loader

ViewModel 是 onSaveInstanceState 替代品吗? 简而言之,不是,但是他们不无关联,请继续读。 我如何高效地使用 ViewModel 来保存和恢复 UI 状态?...一旦相关联 UI 控制器(fragment/activity)被销毁或者进程停止了,ViewModel 和所有被包含数据都将被垃圾回收机制标记。...每一种都会存储 activity 中使用不同数据: 本地持久化是用于存储当打开或关闭 activity 时所有你不想丢失数据。 举例: 包含了音频文件和元数据所有音乐对象集合。...在音乐搜索例子中,不同事件应该被这样处理: 用户添加一首音乐时候 — ViewModel 会迅速代理本地持久化这条数据。...当用户搜索音乐时候 — 任何从数据库为 UI 控制器加载复杂音乐数据应该马上存入 ViewModel。你也应该将搜索查询本身存入 ViewModel

97420

语义耦合(Semantic Coupling)

Demo 方法之前没有调用 Init,Foo 是会抛出异常(事实上实现代码异常不应该抛出,详情请参阅我另一篇文章 永远不应该让实现异常抛出 - 吕毅)。...ViewModel正在期望对方来为自己实现某项自己无法单独实现功能。 Message 毕竟是 MVVM 框架中一个强大组成部分,只依赖于此机制也能够部分消除此耦合。...如此改动,那么 ViewModel 代码中将不再包含任何期望 View 执行逻辑,View 自己决定删除元素时是否播放动画(还是决定元素变灰),自己决定是否显示错误提示(还是决定自动纠正)。...我在自己编写 MVVM 框架中弱化了 Message 机制(是非常弱),逼迫 ViewModel 实现者不要试图通知 View 做任何事情,而是由 View 实现者决定是否对 ViewModel...欢迎转载、使用、重新发布,但务必保留文章署名 吕毅 (包含链接: https://walterlv.com ),不得用于商业目的,基于本文修改后作品务必以相同许可发布

77610

使用 Architecture Component 实现 MVVM 正确姿势

思考一下如果用常规做法如何实现:加 Callback?还是使用 EventBus?...,ViewModel 生命周期是比 Activity 长,因此我们不应该ViewModel 中持有 View 或者任何和 Activity context 引用关系类,否则会引发内存泄露风险...: // 懒加载,只有在使用时候才初始化,但是还是要保证在 Activity.onCreate() 或者 // Fragment.onAttach() 之后再使用 private val viewModel...UI 相关数据,从 Repo 获取数据(可能需要)经过一些处理再提供给 View,这个处理过程应该放在 ViewModel 中(可以使用 Transforms) View 层不应该有过多逻辑代码...理想情况下 ViewModel 中不应该有 Android framework 相关代码,这用对于可测性而言会更加友好(不需要 mock Android 相关代码) 注意内存泄露问题 ViewModel

77520

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

❌ 不要让 ViewModel(或Presenter)直接使用 Android 框架内类 条件语句、循环和一般判定等语句应该ViewModel 或者应用程序其他层中完成,而不是在 Activity...当 ViewModel 正在工作时候,一个 Activity 可能处于自己 生命周期 任何状态。...✅ 添加数据仓库作为数据访问单一入口。 关于数据状态 考虑一下这种情况:你正在观察一个 ViewModel 暴露出来 LiveData,它包含了一个待显示数据列表。...MyDataState 可能包含数据是正在加载还是已经加载成功、失败信息。 ? 可以将类中有状态和其他元数据(比如错误信息)数据封装到一个类。参见示例代码中 Resource 类。...继承 LiveData LiveData 最常见用例是在 ViewModel使用 MutableLiveData 并且将它们暴露为 LiveData 来保证观察者不会改变他们

3K30

上手指南 | Jetpack Hilt 依赖注入框架

生命周期,他是 App 父组件,提供访问其他组件依赖 在 Application 中配置好后,就可以使用 Hilt 提供组件了;组件包含 Application,Activity,Fragment...: User } ---- 使用 @Qualifier 提供同一接口,不同实现 还是上面的 User 接口,有两个不同实现,如下: override fun getName(): String...查找了一些资料: 主要问题之一是,通过在 Hilt 中发现模块方式,无法区分哪些模块属于应用中组件(如果他们确实使用过 Hilt) 已经库或其他库中组件 另一个问题是,他将预先构建组件层次结构变得复杂和混乱...同样,如果一个仅包含片段库并托管在应用程序活动中,那可能会遇到类似的情况,您希望库片段是独立,单让 FragmentComponent 对象作为 ActivityComponent 并没有意义。...使用起来简单,告别繁琐 new。。。 这种流程,只需要添加注解即可。提高了代码可读性,构建简单,耦合变低,容易测试 我感觉最大好处就是管理他们生命周期,只能在对应范围内进行使用

1.6K30

上手指南 | Jetpack Hilt 依赖注入框架

生命周期,他是 App 父组件,提供访问其他组件依赖 在 Application 中配置好后,就可以使用 Hilt 提供组件了;组件包含 Application,Activity,Fragment...lateinit var user: User } 复制代码 使用 @Qualifier 提供同一接口,不同实现 还是上面的 User 接口,有两个不同实现,如下: class UserAImpl...查找了一些资料: 主要问题之一是,通过在 Hilt 中发现模块方式,无法区分哪些模块属于应用中组件(如果他们确实使用过 Hilt) 已经库或其他库中组件 另一个问题是,他将预先构建组件层次结构变得复杂和混乱...同样,如果一个仅包含片段库并托管在应用程序活动中,那可能会遇到类似的情况,您希望库片段是独立,单让 FragmentComponent 对象作为 ActivityComponent 并没有意义。...使用起来简单,告别繁琐 new。。。 这种流程,只需要添加注解即可。提高了代码可读性,构建简单,耦合变低,容易测试 我感觉最大好处就是管理他们生命周期,只能在对应范围内进行使用

1.7K20

iOS面试题:MVVM和MVC区别

你可能试着把它放在Model对象里,但是也会很棘手,因为网络调用应该使用异步,这样如果一个网络请求比持有它model生命周期更长,事情将变复杂。...都不能直接引用model,而是引用视图模型(viewModelviewModel 是一个放置用户输入验证逻辑,视图显示逻辑,发起网络请求和其他代码地方 使用MVVM会轻微增加代码量,但总体上减少了代码复杂性...2.2 MVVM 注意事项 view 引用viewModel ,但反过来不行(即不要在viewModel中引入#import UIKit.h,任何视图本身引用都不应该放在viewModel中)(PS...:基本要求,必须满足) viewModel 引用model,但反过来不行* MVVM 使用建议 MVVM 可以兼容你当下使用MVC架构。...viewModel 绝对不能包含视图 view(UIKit.h),不然就跟 view 产生了耦合,不方便复用和测试。 viewModel之间可以有依赖。

1.4K30

iOS架构设计:揭秘MVC, MVP, MVVM以及VIPER

掌握设计模式可能会让人上瘾,所以要小心:你可能在阅读这篇文章之前已经问过自己一些问题,比如说: 谁应该拥有联网请求:Model还是Controller?...这种情况还是会发生,所以不要难过。...因为前者通过ViewModel设置绑定来更新状态,而后者只监听Presenter事件但并不会对自己有什么更新。...可测性 — ViewModel不知道关于View任何事情,这允许我们可以轻易测试ViewModel。同时View也可以被测试,但是由于属于UIKit范畴,对他们测试通常会被忽略。...为了实现这些功能,需要使用服务、管理器,但是他们并不被认为是VIPER架构内模块,而是外部依赖。

1.3K20

ViewModel再问—字节真题

之前我们说过一期ViewModel,但是有读者反映还是有些面试题不会回答,今天就节选一些再来看看 : ViewModel怎么实现自动处理生命周期? 为什么在旋转屏幕后不会丢失状态?...所以,到这里,第三个问题应该也可以回答了,2.0之前呢,都是通过他们创建了一个空fragment,然后跟随这个fragment生命周期。...2.0之后呢,是因为不管是Activity或者Fragment,都实现了LifecycleOwner接口,所以ViewModel是可以通过Lifecycles感知到他们生命周期,从而进行实例管理。...GlobalScope.launch { longRunningFunction() anotherLongRunningFunction() } 但是这种全局使用方法,是不被推荐使用...所以只要使用ViewModel,就可以使用 viewModelScope在 ViewModel 中启动各种协程,而不用担心任务泄漏。

1.7K20

Jetpack Hilt 依赖注入框架上手指南

,他是 App 父组件,提供访问其他组件依赖 在 Application 中配置好后,就可以使用 Hilt 提供组件了;组件包含 Application,Activity,Fragment,View...lateinit var user: User } 使用 @Qualifier 提供同一接口,不同实现 还是上面的 User 接口,有两个不同实现,如下: class UserAImpl @Inject...查找了一些资料: 主要问题之一是,通过在 Hilt 中发现模块方式,无法区分哪些模块属于应用中组件(如果他们确实使用过 Hilt) 已经库或其他库中组件 另一个问题是,他将预先构建组件层次结构变得复杂和混乱...同样,如果一个仅包含片段库并托管在应用程序活动中,那可能会遇到类似的情况,您希望库片段是独立,单让 FragmentComponent 对象作为 ActivityComponent 并没有意义。...使用起来简单,告别繁琐 new。。。这种流程,只需要添加注解即可。提高了代码可读性,构建简单,耦合变低,容易测试 我感觉最大好处就是管理他们生命周期,只能在对应范围内进行使用。感觉非常好。

1.5K20

架构之路(六):把框架拉出来

*/ 业务层里,通常我们就把需求里一些名词拎出来,做成一个一个类,以创业家园为例,就应该有一个博客类(Blog),博客里还有方法,比如GetBlog(int Id),或者GetBlogs(int pageIndex...这个时候,我应该是已经开始接触ORM了,他们操作方式给了我启迪:关系数据库“增删改查”中“改”没了。...所以还是把它放到了Entity中使用。 认为Repository是“聚合根”一种,和取出/存储对象并列,应该置于Entity之外。...ViewModel究竟是什么?它说承载职责应该是什么?应该由谁来构建它?...…… 我认为:ViewModel本质上就是一个用于页面呈现数据容器(DTO),所 以他不应该具有任何内在逻辑,而且应该由前端开发人员来构建它。

58790

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

这个系列我做了协程和Flow开发者一系列文章翻译,旨在了解当前协程、Flow、LiveData这样设计原因,从设计者角度,发现他们问题,以及如何解决这些问题,pls enjoy it。...这一原则与面向对象编程单一责任原则密切相关,该原则指出:"每个模块、类或函数都应该对软件所提供功能单一部分负责,而且该责任应该完全由类、模块或函数封装。"...所以这个类应该有我们视图所依赖所有变量内容。每次有任何用户输入/动作,我们都会暴露这个类修改过副本(以保持之前没有被修改状态)。...它用于将用户输入/动作传递给ViewModel。我们可以使用KotlinSealed Class来创建这个事件集。...为了避免冗余和简化这种架构在多个地方使用,我创建了两个抽象类,一个用于我们视图(为Activity、Fragment、自定义视图分开),一个用于ViewModel

1.7K20

win10 uwp MVVM入门

UWP 虽然可以直接在xaml.cs 写逻辑但是我们是推荐使用 MVVM 框架,写一个自己框架也很简单。 本文主要:如何在 UWP 使用 MVVM,如何做一个自己框架。...写在xaml.cs,这是最简单方式,可以使用代码或在xaml绑定DataContent和ViewModel 写成 xaml 静态资源,这个方式我们使用次数还是比较多,可以让 Code 不写代码就可以绑定...我们说完了在App.xaml 使用静态资源,还没说如何写一个类,包含我们 ViewModel ,然后写出静态资源,我们所有的 ViewModel 都从他这里拿。...我们可以在 ViewModelLocater 使用 ViewModel 数组,使用反射获得所有 ViewModel ,知道添加他们到数组。...开始是进入主页面,主页面有图床、信息、设置三个页面,于是这个三个页面都在主页面,而这三个页面都没有跳转页面,所以他们可以从 MainViewModel 拿到自己 ViewModel

2K10
领券