问题标签 [android-livedata]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
3644 浏览

android - 如何转换 LiveData> 进入 LiveData>?

假设我们有两个 LiveData 对象:

并且通过某种方法(或构造函数) Foo 可以转换为 Bar 对象。将具有 Foo 对象列表的第一个可观察对象转换为具有 Bar 对象列表的可观察对象的最佳方法是什么。

我知道可以这样做:

但是有没有更好的方法类似于 RxJava 中的 flatMap 操作符,通过它我们可以对列表中的项目进行所有必要的转换,而不是像上面的例子那样处理列表本身?

0 投票
1 回答
613 浏览

android - 如何使用带有 sqlite 和广播接收器的视图模型来更新 UI?

我有一个用于测试连接性的应用程序,它有 20 分钟的警报,并且必须使用唯一代码联系服务器,并且服务器会发送具有相同代码的短信进行确认。我的所有组件都在工作,但我不知道如何让唯一代码在 UI 中自动更新。警报将每个请求写入一个 sqlite 数据库,我希望它能够使用 observable 自动更新 UI。

如果这有什么不同的话,我的项目就在 Kotlin 中。

基本上,我只是不知道如何“观察” sql 数据库的更改或如何让广播接收器和活动使用相同的 observable

0 投票
0 回答
770 浏览

android - LiveData onResume 未获取新值,在 Android 7 SDK 之前

我正在使用带有活动的 LiveData。当我在 Android 7 上测试时一切正常,但是当我在较低的 Android SDK 版本上测试时出现问题。

  1. 当我关闭应用程序,发送一些消息,然后再次打开应用程序时,我正在通过 LiveData 从 ViewModel 获取接收到的值。
  2. 但是,如果我在当前活动上打开新活动,在 ViewModel 中收到一些消息,然后返回到该活动,我不会在活动中收到这些消息。

在第一种情况下onPauseonStop然后onStartonResume被调用。在第二种情况下onPause, thenonResume被调用。同样在第二种情况下,我有活跃的观察者,但我没有收到消息。

聊天视图模型

聊天活动

更新

经过更多调试,我发现在 Android 7 活动中,在onPause调用后继续从 LiveData 接收值。但在较旧的 Android SDK 上它不起作用。

0 投票
8 回答
13918 浏览

android - 可空性和使用 Kotlin 的 LiveData

我想将 LiveData 与 Kotlin 一起使用,并且具有不应为空的值。你如何处理这个问题?也许是 LiveData 的包装器?在这里寻找好的模式..例如:

我知道访问时 value 不会为 null - 但我总是必须检查 null 或周围有这些丑陋的!!。

0 投票
1 回答
247 浏览

android - 如果使用标准 Fragment,LiveData 不会调用 LifecycleRegistryOwner

我正在尝试将标准 Android 片段与 LiveData 一起使用。更新由房间数据库中的更新触发。不幸的是,我的观察者没有被触发。

示例代码:

}

如果我强制忽略生命周期事件,我会收到更新。

有人能发现我的错误吗?我没有使用 v4.Fragment,而是使用标准的 Android 版本,但是当我将 LifecycleFragment 中的实现复制到我的代码中时,我认为这应该可以工作。

0 投票
2 回答
1731 浏览

android - LifecycleRegistryOwner 类已弃用

我正在使用 Android 架构组件中的 Room 数据库。所以因为LiveData我正在LifecycleRegistryOwner我的活动中实现接口。由于可以使用替代解决方案,LifeCyceActivity但我的活动已经在扩展,BaseActivity所以我不能这样做。

什么是替代品LifecycleRegistryOwner

0 投票
1 回答
9158 浏览

android - Android 架构组件 ViewModel 上下文

我正在研究 google 的架构组件以在我的应用程序中实现 ViewModel 和 LiveData,官方文档说:

注意:由于 ViewModel 比特定的 Activity 和 Fragment 实例的寿命更长,它不应该引用 View 或任何可能持有对 Activity 上下文的引用的类。如果 ViewModel 需要 Application 上下文(例如,寻找系统服务),它可以扩展 AndroidViewModel 类,并在构造函数中有一个接收 Application 的构造函数(因为 Application 类扩展了 Context)

之后,我最终得到了这样的代码:

我应该在活动中正常实例化它吗?

不是很糟糕吗?在需要访问 SharedPreferences 或任何需要上下文的东西时使用此应用程序变量?如果是,我是否应该避免在 ViewModel 上使用它而只在视图上使用它?特别是如果我想用需要上下文的值更新 UI 组件。我有点不知道如何解决这个问题,我愿意接受任何建议。

提前致谢

0 投票
0 回答
1600 浏览

android - 作为源添加到 MediatorLiveData 的 LiveData 不会进入非活动状态

我可能在 MediatorLiveData 源行为中遇到了一个错误。如果您将 LiveData 作为源添加到 MediatorLiveData,然后在观察者中再次将其删除,则源 LiveData 将重新进入活动状态,即使不应再注册任何观察者:

在您的 LifecycleOwner 中:

输出:

这里发生了什么?我希望 stringLiveData 保持不活动状态?这是错误还是预期行为?

有趣的是,如果您在注册观察者后调用 stringData.setValue(),则行为与预期一致(仅日志输出的前三行)。

我正在使用版本 1.0.0 Alpha 9-1。

0 投票
1 回答
2072 浏览

java - 改造,实时数据适配器,使响应类包装器通用?

我使用 LiveData 调用适配器进行改造,改编自 google 示例

我必须使用不同的端点,所以我想让 ApiResponse 通用。ApiResponse 将是接口或抽象的,并且对于所有这些端点都有不同的变体;我不想为每个扩展 ApiResponse 的类编写不同的 LiveData 扩展。

我想做类似的事情:

(我知道前面的代码是不可编译的,它只是我想要的一个例子)

然后在改造界面中我可以:

0 投票
7 回答
20612 浏览

android - Android Room:更新插入的 LiveData 回调?

我有一个简单的 DAO,包括 CRUD 功能

FeedEntryDAO.java

对于select,可以返回 LiveData 类型。

在 Activity 内部,代码非常适合选择

但是,当我尝试插入、更新、删除数据时。代码看起来有点难看,而且每次都会创建一个异步任务。

我有两个问题:

  1. 我可以使用 LiveData 来包装删除、插入、更新功能吗?
  2. 为删除、插入、更新维护这样的异步任务类的更好方法?

感谢任何建议和意见。谢谢你。