使用 SavedStateHandle 引用共享视图模型

2024-02-10

我有单个活动应用程序和片段数量。其中一些片段正在使用我的视图模型,通常如下所示:

private val myViewModel: MyViewModel by sharedViewModel()

如果我想同时拥有模型怎么办shared并用 SavedStateHandle 保持其状态?我无法弄清楚这是否受支持,如果是,则需要如何使用它(在托管活动中将 viewmodel 声明为 stateViewModel 不起作用)。


更新:随着 koin 2.1.6 的到来,他们引入了org.koin.androidx.viewmodel.ext.android.stateSharedViewModel您可以在片段中使用它。


好吧,经过一个小时的挖掘 Koin 样本并找出一些问题后:

  1. 假设您的视图模型与此类似:
class SavedStateViewModel(val handle: SavedStateHandle, val service: SimpleService) 
  1. ...你的 DI 看起来像这样:
viewModel { (handle: SavedStateHandle) -> SavedStateViewModel(handle, get()) }
  1. 您的共享状态视图模型可以在片段中使用,如下所示:
val sharedSaved: SavedStateViewModel by sharedViewModel()
  1. (重要!)您的活动中需要此声明:
lateinit var savedVm: SavedStateViewModel
  1. (重要)你需要在之后立即调用它super.onCreate(savedInstanceState)在您的活动中:
savedVm  = getStateViewModel() 

重要的是不要使用上述的惰性版本(stateViewModel)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 SavedStateHandle 引用共享视图模型 的相关文章

随机推荐

  • 如何在 setInterval ajax Web 服务调用中阻止 ASP.net 表单身份验证/会话更新?

    我编写了一个控件 其中包含一个 javascript 组件和一个 Web 服务组件 我遇到的问题是 javascript 设置为 setInterval this checkAlertsHandler this messageCheckIn
  • 条码字体与条码打印机字体有什么区别

    有人知道条形码字体 在报告中用作字体 和直接从条形码打印机打印的字体之间的区别吗 为什么条码字体前后要加星号 据我了解 当我们使用条形码打印机时 我们不需要它 为什么不呢 星号字符是规范的一部分Code 39 http en wikiped
  • Nokogiri、open-uri 和 Unicode 字符

    我正在使用 Nokogiri 和 open uri 来获取网页上标题标签的内容 但在处理重音字符时遇到问题 处理这些问题的最佳方法是什么 这就是我正在做的 require open uri require nokogiri doc Noko
  • Rails 4 将登录设计为弹出窗口

    您好 我正在使用设备对用户进行身份验证 我已经按照各种教程在弹出窗口中登录 但我没有成功 任何人都可以详细告诉我如何做到这一点 我已经尝试了各种教程 但没有任何效果 每件事都再次重定向到登录页面 我是 Rails 的新手请帮忙 我无法在同一
  • 价值迭代和策略迭代有什么区别? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 在强化学习中 有什么区别策略迭代 and 价值迭代 据我了解 在价值迭代中 您使用贝尔曼方程来求解最优策略 而在策略迭代中 您随机选择一个
  • 为什么使用@PostConstruct?

    在托管 Bean 中 PostConstruct在常规 Java 对象构造函数之后调用 我为什么要使用 PostConstruct通过 bean 初始化 而不是常规构造函数本身 因为当调用构造函数时 bean 尚未初始化 即没有注入依赖项
  • 如何在 Visual Studio 2008 中关闭 RTTI

    我不确定其他版本 但是 在 VS 2008 中 即使禁用了 RTTI 我也可以通过调用来查询信息typeid T name 关于类型 它适用于所有类型 包括内部类型和用户创建的类型 我们的项目禁用了 RTTI 但我惊讶地发现这仍然有效 这是
  • 如何在批量插入之前将 .csv 文件中的日期转换为 SQL 格式

    我有一个 csv 文件 其中包含几千个游戏日期 但它们都是 MM DD YYYY 格式 2 27 2011 3 05 PM 26 14 26 和 14 是团队 ID 尝试将它们放入 SQL 中只会导致 0000 00 00 被放入我表的日期
  • Google 操作模拟器不适用于标准 Google Assistant 功能

    我已经使用 Actions on Google 2 5 0 和dialogflow fulfillment 0 6 1 Node js 库构建了一个操作 我无法在对话框流测试控制台上测试我的应用程序 因为我返回那里不支持的 conv 对象
  • 编译器不遵循 Visual Studio C++ 中的符号链接

    我正在使用 Visual Studio 2008 C 项目 Visa 32 位 我有以下内容 include我的源代码中的指令 include
  • 克隆 git 存储库时出现 RSA 主机密钥警告

    我正在使用 git bash 克隆我的 github 存储库并不断收到警告 我正在使用 SSH 所以 我使用这个 git 命令 git clone email protected cdn cgi l email protection Tap
  • 启用迁移 - 无法将参数绑定到参数“路径”

    我是 ASP NET 新手 正在尝试使用实体框架设置 webAPI C 应用程序 但是当我尝试在 nuget package manager 控制台上运行 Enable Migrations 命令时 出现以下错误 无法将参数绑定到参数 Pa
  • Android - 播放视频的不同方式

    我刚刚遇到了 VideoView 的限制 无法播放宽度超过 320 像素的 mp4 视频文件 我想知道我们如何才能克服这些限制 我试图让我的应用程序尽可能宽容 所以除了使用 VideoViews 之外 还有其他方法来播放这些 mp4 视频吗
  • jmeter HTTP响应代码:org.apache.http.conn.HttpHostConnectException,非HTTP响应消息:连接被拒绝错误

    我正在使用 JMeter 测试负载 我正在使用 Amazon Server 当我测试 400 个并发用户的负载时 我收到错误消息 HTTP response code org apache http conn HttpHostConnect
  • 检测 Symfony2 中的实体配置错误

    好吧 我不知道如何修复项目中的错误 我正在尝试处理具有多对多属性关系的嵌套表单 错误表明它无法创建关联 因为其中一侧需要 ID 好吧 所以我尝试只创建缺失的一面 但仍然是同样的错误 最后 我意识到这个简单的代码仍然存在同样的问题 publi
  • 如何在 MPMoviePlayerController iPhone 中关闭音频

    如何关闭和打开 MPMoviePlayerController 的音频 我尝试了 useApplicationAudioSession 这个属性 即使它不起作用 你能帮我么 回答永远不会太晚 对吗 我也在寻找一种方法来做到这一点 我花了一段
  • git fetch 使用路径而不是远程

    我明白跑步的意义git fetch
  • wordpress .htaccess 重写 url

    我正在为我的 WordPress 网站开发测验部分 我的网站上安装了 W3 总缓存 我想进行测验 http www example com quiz seo friend title id http www example com quiz
  • Oracle:非池连接和 DRCP 之间的区别

    我实际上正在读书Oracle cx Oracle http www oracle com technetwork articles dsl python 091105 html教程 在那里我遇到了非池连接和 DRCP 基本上我不是 DBA
  • 使用 SavedStateHandle 引用共享视图模型

    我有单个活动应用程序和片段数量 其中一些片段正在使用我的视图模型 通常如下所示 private val myViewModel MyViewModel by sharedViewModel 如果我想同时拥有模型怎么办shared并用 Sav