问题标签 [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.
java - 屏幕旋转后恢复流转换为实时数据
假设我有这样的活动:
视图模型是:
我想正确处理旋转,所以如果用户在倒计时为 5 时旋转他的设备,我希望旋转后的下一个值是 5(或者如果第二个已经过去,则为 4),只需在倒计时实际应该是的地方拿起.
如果火箭已经升空,我希望它在旋转后保持这种状态,我不希望倒计时再次开始。
目前,LiveDataReactiveStreams
在暂停时取消订阅并在恢复时进行新订阅,因此倒计时重新开始。
我猜我应该在我的 RxJava 部分代码中更改一些内容以使其正常工作。关于改变什么的任何想法?
android - 仍需要 LifecycleRegistryOwner 弃用显式实现
我可以看到有关LifecycleRegistryOwner
. 在谷歌文档中我可以看到:“使用android.support.v7.app.AppCompatActivity
which extends LifecycleOwner
,所以这个类没有用例。” 但是,我使用了一个片段。我从“ android.support.v4.app.Fragment
”导入的片段我可以看到这个片段已经实现了LifecycleOwner
。
但是,当我删除接口的显式实现时LifecycleRegistryOwner
,与 LiveData 相关的功能停止工作。当我恢复实现接口时一切正常,但我有警告。
android - Android LiveData - 第二次更新时不会触发 switchMap
我有一个LiveData
依赖于另一个的对象LiveData
。据我了解,Transformations.switchMap
应该允许链接它们。但是switchMap
处理程序仅触发一次,并且不会对进一步的更新做出反应。相反,如果我observe
在第一个对象上使用,当它准备好时,检索第二个,它工作正常,但在这种情况下,我必须在Activity
而不是ViewModel
. 是否可以链接LiveData
对象,例如Transformations.switchMap
,但接收所有更新,而不仅仅是第一个?
这是一个尝试使用switchMap
:
这是一种observe
活动中的方法(有效,但需要保持活动中的逻辑):
android - LiveData - 将 SingleLiveEvent 与转换一起使用
我现在正在使用最新的 Android 架构组件,尤其是 ViewModel 和 LiveData。
我的情况是此处建议的SingleLiveEvent是相关的,即我返回一个错误并且我只想显示一次警报。在向 Activity 发出值之前,我需要将我的错误映射到更适合视图的对象。我为此使用了转换。
所以最后,我有一个看起来像这样的 ViewModel:
在我的存储库中,我在哪里使用 SingleLiveEvent:
这工作得很好,但我注意到当方向多次更改时,我的事件并没有一直传播。在调试时,我注意到观察者注册和移除之间没有对称性:
- 在注册时,我的 SingleLiveEvent 的观察者是我 SingleLiveEvent 中的匿名观察者类
- 在删除时,要从我的 SingleLiveEvent 中删除的观察者是 MediatorLiveData(实际上是在观察我的 SingleLiveEvent 中的早期匿名类)
发生的情况是,我的初始观察者永远不会从 SingleLiveEvent 的观察者中移除(因此,如果方向更改多次,我的 SingleLiveEvent 有多个观察者)。
我无法弄清楚为什么在移除时这不是同一个观察者。在没有转换步骤的情况下复制它时,不存在这样的问题。
有没有人暗示过这种行为?SingleLiveEvent(不是框架的一部分)和转换不应该一起工作吗?
android - 我需要为 android.arch.lifecycle.LiveData 观察方法设置什么?
我有片段:
Room dao 方法LiveData
返回onCreateView
:
我可以设置为observe
method: this, getActivity() 但我不明白我需要什么。因为 observ 设置了第一个参数:
如果我设置 this(BasketFragment) 或 getActivity() - 它不是LifecycleOwner
你需要做什么?
android - 带有 Livedata 的文本观察器
我正在构建一个 Android 应用程序这是我的片段
这是mi ViewModel:
}
我想添加一个 EditText 来过滤我的 RecyclerView,但我不知道该怎么做。
android - ROOM OutOfMemoryError R(OOM)
我在我的游戏控制台中看到了这些错误。有人知道如何最好地处理房间中的 OOM 错误吗?
android - 从 LiveData.observe() 将项目添加到适配器的最佳实践
我返回了 DAO 方法LiveData<List<Category>>
:
之后,我需要将此数据设置为我的适配器:
如果我在数据库中没有数据,我会显示更新按钮(从服务器获取数据并插入数据库)。如果我有数据,我会创建适配器并为其设置数据。
之后,如果我将一些插入Category
数据库,我会得到:
- 触发观察方法并获取所有类别
- 使用此数据创建新适配器
我认为这是非常糟糕的做法(为更新每个项目创建一个新适配器),我可以通过某种方式:
更改我的适配器并添加方法
addData(List<Category> categories);
在 onCreateView 我创建适配器:
categoryAdapter = new CategoryAdapter(new ArrayList());
然后当我在observe
方法中获取数据时,我将它添加到适配器:
并进入addData
循环中的方法检查每个项目,如果不存在则添加到列表并通知数据。
改变方法
LiveData> listLiveData = categoryDao.getAll();
至
并将此项添加到observe
方法中。但我有 2 个问题: 1 - 如何首先添加所有数据?我必须实现 2 个方法getAll
(调用 wen 创建适配器)和getLast
(调用数据库中的每个插入)。2. 这个getLast
方法怎么写?
- 你会建议我的正确方法:)
android - 从 ViewModel 观察 LiveData
我有一个单独的类,我在其中处理数据获取(特别是 Firebase),我通常从中返回 LiveData 对象并异步更新它们。现在我想将返回的数据存储在 ViewModel 中,但问题是为了获得所述值,我需要观察从我的数据获取类返回的 LiveData 对象。观察方法需要一个 LifecycleOwner 对象作为第一个参数,但我的 ViewModel 中显然没有它,我知道我不应该在 ViewModel 中保留对 Activity/Fragment 的引用。我应该怎么办?
android - AndroidViewModel - 进行重复调用不会在观察函数中返回数据
我的问题与ViewModel 第二次返回 nullobserve
有关,如果我重复调用服务器,我不会在函数中获得回调。以下是我正在使用的代码 -
在 Activity 中,ViewModel 定义如下 -
该observeViewModel
函数用于添加 observable on ViewModel
。
在上面的函数中取消注释以下行允许回调每次都来,但必须有一个正确的方法来做到这一点。
请注意:- 我不需要 RxJava 实现来实现它。