ViewModelProviders 无法在我的片段中工作

2024-04-04

这就是我正在尝试做的事情。

  • Set an ArrayListFragment 内的对象
  • 从观察者处获取该数组FragmentActivity容器(承载所有片段的活动)

所以,我所做的如下。

首先我创建了SharedViewModel我将从哪里设置和获取数据:

共享视图模型.kt

class SharedViewModel: ViewModel() {

    var personArrayObj:MutableLiveData<ArrayList<Person>> = MutableLiveData()

    fun setPersonArray(personArray:ArrayList<Person>){
        personArrayObj.value = personArray
    }

    val getPersonArray:LiveData<ArrayList<Person>>
    get() = personArrayObj

}

现在,我实例化这个ViewModel在 - 的里面MainActivity托管所有片段创建,所以,我可以获得ArrayData从任何片段其集合:

MainActivity.kt

class MainActivity: FragmentActivity(){

private lateinit var viewModel:SharedViewModel

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        viewModel = ViewModelProviders.of(this).get(SharedViewModel::class.java)
        viewModel.getPersonArray.observe(this, Observer { it:ArrayList<Person>
            Log.d("Array:",""+it)
        })
    }

}

然后我需要做的最后一件事是从我想要的任何 Fragment 设置该数组的值,然后如果该值发生变化,主机 Activity 将被触发,所以,要做到这一点,我简单地做了一个viewModel.setValue(personArray)按我的意愿Fragment .

问题

当我尝试实例化SharedViewModel在任何片段中我都会遇到这个问题:

我试图断言!对于 null,也使用 let,但不起作用,我想知道它从哪里来FragmentActivity必需的

如果我使用viewLifecycleOwner代替activity它告诉我,它也不能被称为Fragment or 片段活动 ?

有什么线索吗?

Thanks .


片段提供了用于检索非空 Activity 的辅助方法 -requireActivity()。用它代替activity:

viewModel = ViewModelProviders.of(requireActivity()).get(SharedViewModel::class.java)

作为替代方案,您可以包括fragment-ktx您的应用程序中的依赖项并使用通过 ActivityViewModels() https://developer.android.com/reference/kotlin/androidx/fragment/app/package-summary#activityviewmodelsKotlin 属性扩展而不是使用ViewModelProviders.of() at all:

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

ViewModelProviders 无法在我的片段中工作 的相关文章

  • “此版本中使用了已弃用的 Gradle 功能,使其与 Gradle 7.0 不兼容。” -反应-原生

    当我尝试运行反应本机应用程序时 我遇到此错误react native run android 我无法安装该应用程序 我正在尝试构建一个相机应用程序 我当前的react native版本 0 62 0 React cli版本 2 0 1 De
  • Android STFP 库 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我想在我的 Android 项目中使用 SFTP 安卓已经有了吗 SFTP 库 还是我必须实现它 I
  • Android:如何从输入流创建 9patch 图像?

    我使用下面的代码实例化 9patch 图像并将其设置为按钮的背景 下图显示了不理想的结果 InputStream MyClass class getResourceAsStream images btn default normal 9 p
  • Android 从键盘读取

    我的登录屏幕根本没有文本字段 当用户使用 RFID 扫描仪扫描他的 id 令牌时 我会得到一个 8 个字符长的字符串 其原理与使用键盘相同 只是更快 我希望我的登录活动在用户扫描其令牌时而不是之前执行 有一个聪明的方法来实现这个吗 我不能有
  • 如何使用表内的 JSONB 数据类型和 PostgreSQL JDBC 驱动程序将 JSON 对象存储到 PostgreSQL 中

    我想将以下 json 对象保存到 PostgreSQL 数据库表中as jsonb fname john lname doe 我当前使用 PGObject 创建对象并将类型设置为 jsonb 并将值作为 json 字符串传递 寻找更好的 m
  • 无法找到/下载 AppCompat-v7:23.1.1

    怎么了 我遇到了很多 找不到 appcompat v7 23 1 1 的问题 许多解决方案都不起作用 经过几个小时的思考和寻找答案 我遇到了一个奇怪的问题 I have gotAndroid 支持库 23 1 1 已安装 所有功能 exce
  • 有没有办法替代Android中的标准Log?

    有没有办法以某种方式拦截对 android 中标准 Log 的调用并执行其他操作 在桌面 Java 中 人们通常会得到一些记录器 因此有多种方法可以安装不同的日志处理程序 实现 但是 Android似乎对Log有静态调用 我找不到任何有关替
  • 如何在我的 Android 应用程序中实现应用内购买?

    如何在我的 Android 应用程序中实现应用内购买 我提到 http developer android com guide market billing billing integrate html billing service ht
  • 无法从 com.android.aaptcompiler.ParsedResource@ef79973 提取资源

    无法从 com android aaptcompiler ParsedResource ef79973 提取资源 无法从 com android aaptcompiler ParsedResource 4c95ce87 提取资源 C Use
  • AOSP 中 android.Build.SERIAL 何时何地生成?

    我知道android Build SERIAL是在第一次设备启动时生成的 但我无法准确定位位置和时间 我正在建造AOSP Jelly Bean Android平板电脑 nosdcard 第二个问题 这个是序列号吗 really对所有人来说都
  • 将 firebase auth 与 google app engine 云端点集成

    有人可以指定 使用一些示例代码 如何验证谷歌云端点中的 firebase 令牌吗 最近提出的问题根本没有澄清 如何将 Firebase 身份验证与 Google 应用引擎端点集成 https stackoverflow com questi
  • 返回主要活动(意图)时传递数据我做错了什么?

    我是安卓新手 这可能是最简单的问题 但我不明白这里出了什么问题 我试图创建一个通过意图传递值的基本示例 因此 当我关闭第二个活动时 我需要将数据传递到主活动 这是代码 意图测试1 主要活动 public void onClick View
  • Android 性能:SharedPreferences 的成本

    当我的应用程序启动时 我使用分片首选项中的值填充容器类 这个想法是处理 SharedPreferences 和 PreferenceManager 一次 因为我猜它们很重 这是一个示例 SharedPreferences prefs Pre
  • 从 Handler.obtainMessage() 获取什么参数

    我正在使用线程来执行一些 BT 任务 我正在尝试向 UI 线程发送消息 以便我可以基于我的 BT 线程执行 UI 工作 为此 我使用处理程序 但我不知道如何检索发送到处理程序的数据 要发送数据 我使用 handler obtainMessa
  • 使用 DiffUtil 在 RecyclerView 上添加拖放

    我有一个从房间数据库更新的列表 我从 Room 收到更新的数据作为新列表 然后将其传递给列表适配器 https developer android com reference androidx recyclerview widget Lis
  • popupBackground 与 Material Design 相关的问题

    我一直致力于将我的应用程序更新为 Material Design 我有一个使用选项卡的应用程序 由于某种原因 每当我使用 android popupBackground 设置下拉菜单颜色时 它就会崩溃 我设置了一个带有选项卡的默认项目并使用
  • 活动组代码示例

    有人可以给我一些使用活动组的示例代码吗 我的应用程序中有一些按钮 我想将活动应用于这些按钮 目前我正在使用 setVisibility 但我被告知活动组将是更好的选择 这是另一个ActivityGroup 示例项目 http richipa
  • 如何在 Android 中保存 Edittext 中的文本而不丢失文本的粗体、斜体等功能

    我想做的就是从 Edittext 中获取文本 该文本具有粗体和斜体等功能 并将其保存在文本文件中 但是当我读回并显示它时 这些功能丢失了 它们不显示 如何通过将文本保存在文本文件或任何文件中来保持丰富的功能 您可以使用Html toHtml
  • Android UnityPlayerActivity 操作栏

    我正在构建一个 Android 应用程序 其中包含 Unity 3d 交互体验 我已将 Unity 项目导入 Android Studio 但启动时该 Activity 是全屏的 并且不显示 Android 操作栏 我怎样才能做到这一点 整
  • 画布:尝试使用回收的位图错误

    我是一个相当新的程序员 所以任何建议将不胜感激 我有一个类 每次调用它时都会在循环中运行 AsyncTask AsyncTask 看起来像这样 public class LoadImageTask extends AsyncTask

随机推荐

  • 从发电机生成

    我有一个生成器 它接受一个数字作为参数并生成其他数字 我想使用这个生成器生成的数字并将它们作为参数传递给同一个生成器 创建一个一定长度的链 例如 mygenerator 2 生成 5 4 和 6 将 mygenerator 应用于这些数字中
  • org.postgresql.util.PSQLException:错误:运算符不存在:整数= bytea

    我正在尝试从 Spring Boot 应用程序执行本机查询 但收到此错误 org postgresql util PSQLException 错误 运算符不存在 整数 bytea 这是我为实现此目的而编写的代码 SqlResultSetMa
  • TypeScript - 如何将索引签名表示为通用类型

    TypeScript 中的索引签名定义如下 字典 key string T Array index number T 这些可以包装成一些简单的 可重用的类型 type DictionaryIndex
  • 在 MySQL 的一个查询中使用不同值更新多行

    我试图了解如何用不同的值更新多行 但我只是不明白 解决方案无处不在 但对我来说似乎很难理解 例如 1 个查询中有 3 个更新 UPDATE table users SET cod user 622057 date 12082014 WHER
  • Application.LoadComponent 找不到资源

    我的项目中有一个 xaml 文件 位于Ns1 Ns2 myfile xaml 它的构建操作设置为Page 使用自定义工具MSBuild Compile 我正在尝试在静态构造函数中加载此文件 namespace Ns1 Ns2 interna
  • 如何使用 LINQ 合并两个列表?

    如何使用 LINQ 合并两个列表 如下所示 class Person public int ID get set public string Name get set public Person Merge Person p return
  • 如何检测字符串是否是Base64Encoded?

    检测字符串是否是 Base64Encoded 的最佳方法是什么 使用 Delphi 你能做的最好的事情就是尝试解码它 如果解码失败 则输入未经过 Base64 编码 如果字符串成功解码 则输入might已经经过base64编码
  • SOAP suds 和可怕的模式 Type Not Found 错误

    我正在使用最新版本的肥皂水 https fedorahosted org suds https fedorahosted org suds 第一次 我在第一步就停滞了 suds TypeNotFound Type not found sch
  • 使用 Maven,如何运行特定测试?

    我的项目中有数千个单元测试 我想选择其中一个或几个从命令行运行 执行此操作的命令是什么 您可以通过传递以下内容来运行类中的所有测试 Dtest
  • Symfony2:加载样式表但未在 NGINX 上应用,导致错误页面损坏

    我刚刚安装了一个全新且干净的 Symfony 应用程序 我使用 NGINX 作为我的网络服务器 样式表在 devtools 网络选项卡中不显示 http 404 错误代码 我可以在预览选项卡中正确看到它们的内容 示例图片 有人遇到过这样的问
  • Eclipse 中的 Scala 执行时间

    当我从 Eclipse 运行 Scala 程序时 出现了一些可疑的情况 我运行一个 App 对象 运行需要 7 8 秒 实际执行时间用对象中的 System nanoTime 计时 当我从命令行运行相同的 class 文件时 需要 2 5
  • 从 json_encode($phpArray) 访问 JSON 对象值

    我是 JSON Javascript 新手 遇到了这种性质的问题 在我的 php 脚本中 我将 php 数组传递给 javascript 如下所示 echo img src misc arrow right png 在我的 JavaScri
  • 有没有用于集成复杂功能的 Haskell 库?

    如何在 Haskell 中对复杂的复值函数进行数值积分 有现成的库吗 数字工具 http hackage haskell org package numeric tools仅在卷轴上运行 我知道在复平面上只有线积分 所以我感兴趣的界面是这样
  • 无法压缩分区数量不等的 RDD

    现在我有3个这样的RDD rdd1 1 2 3 4 5 6 7 8 9 10 rdd2 11 12 13 14 rdd3 15 16 17 18 19 20 我想这样做 rdd1 zip rdd2 union rdd3 我想要的结果是这样的
  • NodeJS 模块与类

    对我来说 类与 NodeJS CommonJS 模块非常相似 您可以拥有许多它们 它们可以重复使用 它们可以互相使用 并且通常每个文件一个 是什么让模块与类如此不同 使用它们的方式不同 命名空间的差异也很明显 除此之外 它们对我来说似乎非常
  • PyQt_Fit:无法导入名称路径

    我正在尝试使用 PyQt Fit 我从 pip install pyqt fit 安装了它 但是当我导入它时它不起作用并显示以下消息 ImportError Traceback most recent call last
  • 使用 Bouncy Castle 在 Java 中复制“openssl smime”?

    我手上有个问题 我不懂 Java 的同事正在使用 OpenSSL 命令对文件进行签名 如下所示 openssl smime binary sign certfile WWDR pem signer passcertificate pem i
  • .fit() 层的 shuffle = 'batch' 参数如何在后台工作?

    当我使用以下方法训练模型时 fit 层的参数 shuffle 预设为 True 假设我的数据集有 100 个样本 批量大小为 10 当我设置shuffle True然后 keras 首先随机选择样本 现在 100 个样本具有不同的顺序 根据
  • 在 Android 应用程序中查看 MS Office 文件

    我正在尝试查看应用程序中的文件 例如音频 视频 PDF 等 我已经成功地做到了这一点 现在我正在尝试查看 Microsoft Office 文件 例如 doc docx xls 和 ppt 在android中有什么办法可以做到这一点 比如调
  • ViewModelProviders 无法在我的片段中工作

    这就是我正在尝试做的事情 Set an ArrayListFragment 内的对象 从观察者处获取该数组FragmentActivity容器 承载所有片段的活动 所以 我所做的如下 首先我创建了SharedViewModel我将从哪里设置