问题标签 [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 投票
2 回答
4487 浏览

android - Android 架构组件:绑定到 ViewModel

在使用新的架构组件时,我对数据绑定应该如何工作感到有些困惑。

假设我有一个带有列表、ProgressBar 和 TextView 的简单 Activity。Activity 应该负责控制所有视图的状态,而 ViewModel 应该保存数据和逻辑。例如,我的 Activity 现在看起来像这样:

而 ViewModel 它只负责加载数据并在列表准备好时通知 Activity,以便它可以准备适配器并显示数据:

我的问题是:显示/隐藏列表、进度条和错误文本的正确方法是什么?

我应该为 ViewModel 中的每个视图添加一个整数,使其控制视图并像这样使用它:

或者 ViewModel 应该为每个属性实例化一个 LiveData 对象:

在需要时更新它们的值并让 Activity 观察它们的值?

我真的很难理解这一点。如果有人能澄清这一点,那就太好了。

谢谢

0 投票
3 回答
8556 浏览

android - 具有多个参数的 LiveData Transformations.map()

我在 UI 中有一个值,它的值取决于两个LiveData对象。想象一个需要 asubtotal = sum of all items price和 a的商店total = subtotal + shipment price。使用转换,我们可以对小计 LiveData 对象执行以下操作(因为它仅依赖于itemsLiveData):

在总数的情况下,能够做这样的事情会很棒:

但是,不幸的是,这是不可能的,因为我们不能在 map 函数中放置多个参数。任何人都知道实现这一目标的好方法吗?

0 投票
13 回答
34647 浏览

android - map() 和 switchMap() 方法有什么区别?

LiveData 类的这两种方法有什么区别?官方文档和教程对此非常模糊。在map()方法中,第一个参数称为source,但在switchMap()中,它称为trigger。这背后的理由是什么?

0 投票
6 回答
47573 浏览

android - 如何以及在何处使用 Transformations.switchMap?

在 Google 最近发布的 Android 架构组件库中,我们在Transformations类中有两个静态函数。虽然该map功能直截了当且易于理解,但我发现很难正确理解该switchMap功能。

switchMap 的官方文档可以在这里找到。

有人可以通过实际示例解释如何以及在何处使用 switchMap 函数吗?

0 投票
2 回答
4970 浏览

android - 如何使用新的架构组件跟踪 android 中的当前位置?

我有一个项目,我已经成功实现了位置跟踪功能,并且运行良好。我每 30 秒使用融合位置提供程序跟踪用户当前位置。(跟踪在 MainActivity 开始时开始)。

现在我打算用新引入的 android 架构组件来更新那个项目。但我不知道如何使用视图模型实现位置跟踪。在MainActivity 或 Application类中开始位置跟踪的正确位置在哪里?我应该使用ViewModel 还是 AndroidViewModel?如何实现这一点。

0 投票
1 回答
1565 浏览

android - Android ROOM - 使用自定义插入查询时未触发 LiveData

我正在尝试存储我的应用程序经常从 API 获得的一些变量的值。我只想在变量更改其值以向用户显示某种“更改历史”时才向数据库表添加新行。我正在使用ROOM来存储数据。

我创建了一个实体:

道:

数据库对象:

用于存储单个数据库对象的 Singleton:

我在 Activity 的 onCreate() 中实例化的视图模型:

我预计每次当方法DatabaseDao.insertNewBalanceResponse()插入一行时都会触发BalanceView.onChanges()方法。

实际上BalanceView.onChanges()方法永远不会被解雇。为什么呢?我怎样才能做到这一点?

ps 但是,如果我将方法DatabaseDao.insertNewBalanceResponse()替换为原始方法:

一切正常,方法onChange()被调用。但是这种插入语句不符合我的需要。

0 投票
1 回答
1391 浏览

android - 带有复选框的 livedata recyclerview

我正在实现 android 架构组件来查看买家列表并选择一个。

这是我的买家实体

我已在 recyclerview 中插入并显示它。

我想知道当点击一个买家时如何显示特定的买家被选中。

如果我点击一个买家之前选择的买家必须取消选择。

请帮我实现这一点。

编辑

这是我的适配器 xml 项

编辑 2 这里我如何在 recyclerview 中添加数据

0 投票
2 回答
264 浏览

android - 在 LiveData Observable 中使用 @IntDef

我正在研究如何更新一些现有代码以使用新的 Android LiveData 架构模式。希望代码示例是不言自明的,我正在努力让@IntDef / @Interface 与实时数据一起工作。我很高兴在 ViewModel 上为 SetAnsweredCorrectly、SetCheated 等创建方法,或者创建一个 MutableLiveData 属性并在代码中设置它,只是我正在努力了解如何使用除普通 Integer 之外的任何东西,它会丢失类型安全。

0 投票
0 回答
1615 浏览

android - 当数据未更改时,Android ViewModel/MutableLiveData onChanged 在新片段中被调用

我遇到了 Android Mutable Live Data 的问题,这可能是因为我的理解不足。场景是我的 Android 选项卡中有 3 个列表。

在我的活动中,我打开了我的第一个片段。在这我称之为

public void openSort(SortType sortType)

到目前为止一切正常。然后我继续打开另一个包含第二个片段的选项卡。这第二个片段在它的

由于某种原因,第二个片段的 onChanged 也会被调用。我的假设是 onChanged 方法仅在视图模型中的数据更改时被调用,但似乎数据由 LiveData 存储并且再次通知观察者。

我们可以做些什么,以便在可变实时数据发生更改时“仅”通知片段?

0 投票
14 回答
93544 浏览

android - LiveData 在第一次回调后删除观察者

收到第一个结果后如何移除观察者?以下是我尝试过的两种代码方式,但即使我删除了观察者,它们也会继续接收更新。