问题标签 [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 回答
1072 浏览

java - 屏幕旋转后恢复流转换为实时数据

假设我有这样的活动:

视图模型是:

我想正确处理旋转,所以如果用户在倒计时为 5 时旋转他的设备,我希望旋转后的下一个值是 5(或者如果第二个已经过去,则为 4),只需在倒计时实际应该是的地方拿起.

如果火箭已经升空,我希望它在旋转后保持这种状态,我不希望倒计时再次开始。

目前,LiveDataReactiveStreams在暂停时取消订阅并在恢复时进行新订阅,因此倒计时重新开始。

我猜我应该在我的 RxJava 部分代码中更改一些内容以使其正常工作。关于改变什么的任何想法?

0 投票
0 回答
167 浏览

android - 仍需要 LifecycleRegistryOwner 弃用显式实现

我可以看到有关LifecycleRegistryOwner. 在谷歌文档中我可以看到:“使用android.support.v7.app.AppCompatActivitywhich extends LifecycleOwner,所以这个类没有用例。” 但是,我使用了一个片段。我从“ android.support.v4.app.Fragment”导入的片段我可以看到这个片段已经实现了LifecycleOwner

但是,当我删除接口的显式实现时LifecycleRegistryOwner,与 LiveData 相关的功能停止工作。当我恢复实现接口时一切正常,但我有警告。

0 投票
2 回答
4070 浏览

android - Android LiveData - 第二次更新时不会触发 switchMap

我有一个LiveData依赖于另一个的对象LiveData。据我了解,Transformations.switchMap应该允许链接它们。但是switchMap处理程序仅触发一次,并且不会对进一步的更新做出反应。相反,如果我observe在第一个对象上使用,当它准备好时,检索第二个,它工作正常,但在这种情况下,我必须在Activity而不是ViewModel. 是否可以链接LiveData对象,例如Transformations.switchMap,但接收所有更新,而不仅仅是第一个?

这是一个尝试使用switchMap

这是一种observe活动中的方法(有效,但需要保持活动中的逻辑):

0 投票
1 回答
4800 浏览

android - LiveData - 将 SingleLiveEvent 与转换一起使用

我现在正在使用最新的 Android 架构组件,尤其是 ViewModel 和 LiveData。

我的情况是此处建议的SingleLiveEvent是相关的,即我返回一个错误并且我只想显示一次警报。在向 Activity 发出值之前,我需要将我的错误映射到更适合视图的对象。我为此使用了转换。

所以最后,我有一个看起来像这样的 ViewModel:

在我的存储库中,我在哪里使用 SingleLiveEvent:

这工作得很好,但我注意到当方向多次更改时,我的事件并没有一直传播。在调试时,我注意到观察者注册和移除之间没有对称性:

  • 在注册时,我的 SingleLiveEvent 的观察者是我 SingleLiveEvent 中的匿名观察者类

注册调试

  • 在删除时,要从我的 SingleLiveEvent 中删除的观察者是 MediatorLiveData(实际上是在观察我的 SingleLiveEvent 中的早期匿名类)

删除调试

发生的情况是,我的初始观察者永远不会从 SingleLiveEvent 的观察者中移除(因此,如果方向更改多次,我的 SingleLiveEvent 有多个观察者)。

我无法弄清楚为什么在移除时这不是同一个观察者。在没有转换步骤的情况下复制它时,不存在这样的问题。

有没有人暗示过这种行为?SingleLiveEvent(不是框架的一部分)和转换不应该一起工作吗?

0 投票
1 回答
513 浏览

android - 我需要为 android.arch.lifecycle.LiveData 观察方法设置什么?

我有片段:

Room dao 方法LiveData返回onCreateView

我可以设置为observemethod: this, getActivity() 但我不明白我需要什么。因为 observ 设置了第一个参数:

如果我设置 this(BasketFragment) 或 getActivity() - 它不是LifecycleOwner

你需要做什么?

0 投票
0 回答
495 浏览

android - 带有 Livedata 的文本观察器

我正在构建一个 Android 应用程序这是我的片段

这是mi ViewModel:

}

我想添加一个 EditText 来过滤我的 RecyclerView,但我不知道该怎么做。

0 投票
1 回答
1306 浏览

android - ROOM OutOfMemoryError R(OOM)

我在我的游戏控制台中看到了这些错误。有人知道如何最好地处理房间中的 OOM 错误吗?

0 投票
1 回答
4957 浏览

android - 从 LiveData.observe() 将项目添加到适配器的最佳实践

我返回了 DAO 方法LiveData<List<Category>>

之后,我需要将此数据设置为我的适配器:

如果我在数据库中没有数据,我会显示更新按钮(从服务器获取数据并插入数据库)。如果我有数据,我会创建适配器并为其设置数据。

之后,如果我将一些插入Category数据库,我会得到:

  1. 触发观察方法并获取所有类别
  2. 使用此数据创建新适配器

我认为这是非常糟糕的做法(为更新每个项目创建一个新适配器),我可以通过某种方式:

  1. 更改我的适配器并添加方法addData(List<Category> categories);

    在 onCreateView 我创建适配器:categoryAdapter = new CategoryAdapter(new ArrayList());

然后当我在observe方法中获取数据时,我将它添加到适配器:

并进入addData循环中的方法检查每个项目,如果不存在则添加到列表并通知数据。

  1. 改变方法

    LiveData> listLiveData = categoryDao.getAll();

并将此项添加到observe方法中。但我有 2 个问题: 1 - 如何首先添加所有数据?我必须实现 2 个方法getAll(调用 wen 创建适配器)和getLast(调用数据库中的每个插入)。2. 这个getLast方法怎么写?

  1. 你会建议我的正确方法:)
0 投票
8 回答
91256 浏览

android - 从 ViewModel 观察 LiveData

我有一个单独的类,我在其中处理数据获取(特别是 Firebase),我通常从中返回 LiveData 对象并异步更新它们。现在我想将返回的数据存储在 ViewModel 中,但问题是为了获得所述值,我需要观察从我的数据获取类返回的 LiveData 对象。观察方法需要一个 LifecycleOwner 对象作为第一个参数,但我的 ViewModel 中显然没有它,我知道我不应该在 ViewModel 中保留对 Activity/Fragment 的引用。我应该怎么办?

0 投票
3 回答
6023 浏览

android - AndroidViewModel - 进行重复调用不会在观察函数中返回数据

我的问题与ViewModel 第二次返回 nullobserve有关,如果我重复调用服务器,我不会在函数中获得回调。以下是我正在使用的代码 -

在 Activity 中,ViewModel 定义如下 -

observeViewModel函数用于添加 observable on ViewModel

在上面的函数中取消注释以下行允许回调每次都来,但必须有一个正确的方法来做到这一点。

请注意:- 我不需要 RxJava 实现来实现它。