首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >带ViewModel遗传的片段继承

带ViewModel遗传的片段继承
EN

Stack Overflow用户
提问于 2021-07-15 14:45:58
回答 1查看 229关注 0票数 2

我有两个Fragments和两个ViewModels,它们具有类似的实现。因此,我决定应用继承。因此,我决定创建一个FragmentParent和一个ViewModelParent,最后得到如下结果:

  • FragmentA和FragmentB都继承了ViewModelParent.

,ViewModelB也继承了ViewModelB

一方面,父母双方都是抽象的,因为他们有要以不同方式实现的方法。另一方面,两个子ViewModels都具有公共的父级视图模型方法以及他们的个人自定义方法。

因此,viewmodel对象必须从FragmentParent调用一些常见的方法,但问题是每个片段都将调用它们相应的视图模型的自定义方法。因此,如果我在viewmodel中声明FragmentParent对象,那么一旦在子对象中使用它来调用每个通讯器视图模型的自定义方法,它就会出现错误,因为viewModel对象的类型对应于ViewModelParent。正如您在图像中看到的那样,不能调用颜色上的方法,因为vM是ViewModelParent的实例,它们属于自定义ViewModels。

一旦需要调用自定义方法,解决方案可能是在每个子片段中强制转换viewmodel对象,但是,我想这是很脏的。这种方法有什么好主意吗?谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-15 16:08:02

将父ViewModel转换为特定的子ViewModel似乎是最好的选择。这是一种常见的铸造方法,我看不出有什么问题。如果要在子片段中多次访问子ViewModel的方法,则可以将强制转换的ViewModel存储在属性中或每个子片段的变量中。例如,如果您使用Kotlin,您可以这样做:

代码语言:javascript
运行
复制
//FragmentA
val viewModel = vM as ViewModelA
viewModel.customAmethod()

//FragmentB
val viewModel = vM as ViewModelB
viewModel.customBmethod()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68395999

复制
相关文章

相似问题

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