问题标签 [mutablelivedata]

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 投票
0 回答
154 浏览

android - 实时数据首先加载以前的结果,然后将新的响应加载到 recylerview

实际上,我使用 API 中的 liveData+retrofit 得到了响应,在第一次尝试中一切正常。如果再次调用相同的 API,它首先显示先前的响应,然后新的响应覆盖之前的响应。我调试代码并且它发生是因为当我进入片段时调用 Live data onChanged 方法,因此显示了第一次尝试时获得的先前 pojo 结果。一段时间以来,它显示了最后一个结果,一旦 API 响应出现,实际响应就会加载到回收站视图。

0 投票
1 回答
369 浏览

kotlin - 用于集合的 MutableLiveData

我逐束从服务器请求数据并将其存储在数组中。为了跟踪下一组数据的获取,我有这个类。在addItems我通知diffObservers并传递新项目列表的方法中:

问题是PackItemsMutableLiveData公开它不是一个好习惯。有没有办法将它转换为 LiveData?就像我们通常做的那样:


UPD:理想情况下,如果我可以公开完全不可变LiveData的内容。但我不能只写

因为在这种情况下packs不会包含observeItems方法。因此必须有自定义类派生自LiveData类似:

但在这种情况下,我将无法设置数据,因为现在 MutablePackItems 是 LiveData(immutable) :)

0 投票
1 回答
1039 浏览

kotlin - 如何将自定义 MutableLiveData 转换为自定义 LiveData?

假设有2个类:

允许从MutableLiveDatato转换:LiveData

但是您不能以这种方式转换自己的实现:

我知道 MutableLiveData 扩展了 LiveData 这就是为什么它们是可转换的。但我不能MyMutableLiveData扩展MyLiveData,因为在这种情况下它不会是可变的

有什么解决方法吗?

UPD:我想我需要展示扩展的动机。我LiveData正在尝试实现MutableLiveDataCollection它不仅通知值更改,setValue/postValue还通知值修改,例如添加新元素。我很惊讶没有本机解决方案。
无论如何,要观察modify事件,必须有额外的观察方法。并且此方法必须在不可变部分中,LiveDataCollection因为视图会调用它。恕我直言,继承是自然的解决方案。

0 投票
1 回答
2340 浏览

android - 即使观察者活动被破坏,MutableLiveData 也会保留旧值

我有一项活动正在观察存储库中的实时数据。现在,当活动被破坏然后再次创建时,我仍然从存储库中获取旧值,除非我手动获取新值。

为什么即使在观察者活动被破坏后 mutablelivedata 仍保留其旧值?

0 投票
1 回答
225 浏览

android - DataBinding 和 LiveData :两种实现(Kotlin 和 Java),不能使 Java impl 工作

我在 Java 项目中使用 DataBinding 和 LiveData 时遇到问题。我在 Kotlin 中学习了以前的课程,当我尝试实现相同的行为时,我就是无法让它发挥作用。在理解方面,我显然缺少一些东西,所以我想请教您一些想法。

我将粘贴 Kotlin(工作)示例中的代码,然后粘贴 Java(不工作)示例。

科特林

score_fragment.xml

分数片段.kt

ScoreViewModel.kt

解释:让我们只关注分值。在 ScoreViewModel 中,该值属于 LiveData 类型。当片段启动时,该值通过“@{String.valueOf(scoreViewModel.score)}”正确显示在屏幕上。这可以正常工作。

JAVA

activity_main.xml

主要活动

NoteViewModel

说明:这里我设置了一个值为“TestT”的 MutableLiveData 测试,然后我打算使用 android:text="@{noteViewModel.test}" 显示它。但是文本永远不会显示并保持空白。

显然有问题,但尽管两种实现之间存在语法差异,但我只是无法弄清楚为什么 Java 版本没有在 Textview 中显示值。

编辑

感谢 Rajnish suryavanshi,我没有以正确的方式进行绑定,我只需要使用:

binding = DataBindingUtil.setContentView(this, R.layout.activity_main);

这个使用提供的布局设置内容视图并返回绑定。或者,您可以这样做:

绑定 = ActivityMainBinding.inflate(getLayoutInflater()); (返回绑定但不设置内容视图)

setContentView(binding.getRoot()); (使用绑定根视图设置内容视图)

我发现这具有误导性-> https://developer.android.com/topic/libraries/data-binding/expressions

它指出我们可以替换

ActivityMainBinding 绑定 = DataBindingUtil.setContentView(this, R.layout.activity_main);

经过

ActivityMainBinding 绑定 = ActivityMainBinding.inflate(getLayoutInflater());

这是不一样的!

很高兴现在得到微妙之处!

0 投票
1 回答
4457 浏览

android - 如何在Android中以正确的方式通过多次观察来观察实时数据?

我有一个活动,它会转到片段-A,然后转到片段-B,如下所示。

Activity -> Fragment-A -> Fragment-B

情况1

这两个片段观察相同的 LiveData 以显示如下所示的snackBar。

视图模型中livedata

错误: 当我使用上面的代码时。它只显示snackBarat fragment-A片段-B无法获取值。

情况2

当我将代码更改为以下

两个片段都可以获取值。

错误:

关闭片段后再次转动。它显示了snackBar,因为它的值responseData仍然存在。但是我没有发送消息。

Event来自 Google 的类参考如下:

我希望片段为他们显示正确的snackBar 消息。

如何livedata在Android中以正确的方式观察多个片段?

提前致谢。

0 投票
1 回答
625 浏览

kotlin - IO线程分派完成时在主线程中运行代码?

我正在使用实时数据。我想在 IO 中运行一些任意代码,然后在完成后,在主线程中运行一些任意代码。

在 JavaScript 中,您可以通过将 Promise 链接在一起来完成类似的事情。我知道 Kotlin 是不同的,但这至少是我理解的一个框架。

我有一个函数,有时会从 Main 调用,有时会从 IO 调用,但它本身不需要特殊的 IO 功能。从内部class VM: ViewModel()

在我看来,显而易见的方法是val a = fetchFromDb()从 IO 执行,然后setVal(a)退出该块并进入 Main。

有没有办法做到这一点?我看不出这个功能不存在的概念性原因。有没有什么想法

可以在 ViewModel 中运行?

请在上面适当的地方用“coroutine”替换“thread”。:)

0 投票
2 回答
2615 浏览

android - Android 双向数据绑定仅以一种方式工作

我有视图模型:

我使用以下方法将它与片段布局连接起来:

在 onCreateView 方法的片段类中:

我可以EditText从片段或 ViewModel 类中更改值,但是当我尝试onBtnClick在 Logcat 中的 ViewModel 方法中获取值时,我收到消息:I/MyViewModel: user: 我在这里缺少什么,以便双向数据绑定从其他方向呢?简而言之,数据从界面上的 ViewModel/ Fragment 流向 EditText,但它不会从界面上的 EditText 流向 ViewModel 字段/方法。提前致谢。

------- EDITED ----- 我设法填充了所有内容,但知道我收到了这个错误:

我想这是因为 viewmodel.user 是 LiveData 类型而不是 String 类型。我写了绑定适配器:

但我仍然收到上述消息。

0 投票
1 回答
232 浏览

android - 从 RxJava 嵌套链中的 LiveDataReactiveStreams.fromPublisher() 发布多个结果

让我们从一个基本示例开始,

假设我有以下代码块用于从存储库获取Auth Token

我在ViewModel中收到LiveData结果

在这一点上,一切都完美无缺。但是,当我想将 2 个请求合并在一起并为每个请求获取单独的LiveData时,问题就来了。假设我想在收到Token API的结果后调用Search API 。我的目标是为每个步骤获得 2次 LiveData事件更改。下面给出了演示我的要求的修改代码,

如何从给定的示例中接收 2 LiveData?

0 投票
2 回答
732 浏览

android - 使用 Handler PostDelayed 更改后 LiveData 未更新?

这是我的视图模型

我调试和检查,日志工作正常。

boolean 的第一个值设置正确,而第二个值设置不正确