android - 如何将视图模型范围限定为父片段?
问题描述
所以我正在使用新的导航组件(使用单一活动原则)并使用共享视图模型在每个片段之间进行通信,但是,我已经到了有时需要清除视图模型但我找不到的地步清除它的好地方。但是 tbh 我认为与其试图自己清除它,不如让框架为我做这件事,但这并不是因为视图模型是共享的,并且仅限于活动,但我认为我可以将它们限制在一个父片段,我画了一张图来说明我正在尝试做的事情。因此,当我从“Child 1 Child a”返回时,我只想清除 2 个视图模型,目前视图模型永远不会被清除,试图通过在片段中调用“this”和在孩子中调用 getParentFragment 来获取当前视图模型不行,谁能举个例子?
编辑
看起来我已经在做类似的事情,但在我的情况下它不起作用,所以我将添加一些代码,这是我如何访问父片段中的第一个视图模型
model = ViewModelProviders.of(this).get(RequestViewModel.class);
然后在子片段中,我正在这样做
requestViewModel = ViewModelProviders.of(getParentFragment()).get(RequestViewModel.class);
但这并没有保留它们之间的数据,它们都附有观察员
解决方案
在您的应用程序中使用Fragment-ktx 库,您可以在您的应用程序-> build.gradle 中获得如下视图模型
implementation 'androidx.fragment:fragment-ktx:1.1.0'
// 获取ParentFragment中的 ViewModel为
private val viewModel: DemoViewModel by viewModels()
// 在ChildFragment中获取与ViewModel相同的实例
private val viewModel: DemoViewModel by viewModels(
ownerProducer = { requireParentFragment() }
)
推荐阅读
- react-native - React Native - 在获取和返回组件时使用 Promise
- r - 强制 R 在 dbplyr mutate_at Spark 翻译中使用单引号
- ajax - 经典 ASP - 无法从 AJAX 发布请求中获取 Request.Form 值
- php - 使用 laravel 验证时间
- python - colab 上的 graphviz - 如何使用 rankdir
- python - 使用子进程模块执行 python 脚本但从 IDLE 执行代码时出现 NameError
- python - ADC的采样率和采样频率的区别
- javascript - Jquery UI 自动完成选择未触发
- r - 在 R Shiny App 的服务器函数中更改 easyButton 状态
- algorithm - 在两个排序数字之间找到缺失数字的最佳算法是什么?