问题标签 [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.
android - 实时数据首先加载以前的结果,然后将新的响应加载到 recylerview
实际上,我使用 API 中的 liveData+retrofit 得到了响应,在第一次尝试中一切正常。如果再次调用相同的 API,它首先显示先前的响应,然后新的响应覆盖之前的响应。我调试代码并且它发生是因为当我进入片段时调用 Live data onChanged 方法,因此显示了第一次尝试时获得的先前 pojo 结果。一段时间以来,它显示了最后一个结果,一旦 API 响应出现,实际响应就会加载到回收站视图。
kotlin - 用于集合的 MutableLiveData
我逐束从服务器请求数据并将其存储在数组中。为了跟踪下一组数据的获取,我有这个类。在addItems
我通知diffObservers
并传递新项目列表的方法中:
问题是PackItems
,MutableLiveData
公开它不是一个好习惯。有没有办法将它转换为 LiveData?就像我们通常做的那样:
UPD:理想情况下,如果我可以公开完全不可变LiveData
的内容。但我不能只写
因为在这种情况下packs
不会包含observeItems
方法。因此必须有自定义类派生自LiveData
类似:
但在这种情况下,我将无法设置数据,因为现在 MutablePackItems 是 LiveData(immutable) :)
kotlin - 如何将自定义 MutableLiveData 转换为自定义 LiveData?
假设有2个类:
允许从MutableLiveData
to转换:LiveData
但是您不能以这种方式转换自己的实现:
我知道 MutableLiveData 扩展了 LiveData 这就是为什么它们是可转换的。但我不能MyMutableLiveData
扩展MyLiveData
,因为在这种情况下它不会是可变的
有什么解决方法吗?
UPD:我想我需要展示扩展的动机。我LiveData
正在尝试实现MutableLiveDataCollection
它不仅通知值更改,setValue/postValue
还通知值修改,例如添加新元素。我很惊讶没有本机解决方案。
无论如何,要观察modify
事件,必须有额外的观察方法。并且此方法必须在不可变部分中,LiveDataCollection
因为视图会调用它。恕我直言,继承是自然的解决方案。
android - 即使观察者活动被破坏,MutableLiveData 也会保留旧值
我有一项活动正在观察存储库中的实时数据。现在,当活动被破坏然后再次创建时,我仍然从存储库中获取旧值,除非我手动获取新值。
为什么即使在观察者活动被破坏后 mutablelivedata 仍保留其旧值?
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());
这是不一样的!
很高兴现在得到微妙之处!
android - 如何在Android中以正确的方式通过多次观察来观察实时数据?
我有一个活动,它会转到片段-A,然后转到片段-B,如下所示。
Activity -> Fragment-A -> Fragment-B
情况1
这两个片段观察相同的 LiveData 以显示如下所示的snackBar。
视图模型中livedata
:
错误:
当我使用上面的代码时。它只显示snackBar
at fragment-A。片段-B无法获取值。
情况2
当我将代码更改为以下
两个片段都可以获取值。
错误:
关闭片段后再次转动。它显示了snackBar,因为它的值responseData
仍然存在。但是我没有发送消息。
Event
来自 Google 的类参考如下:
我希望片段为他们显示正确的snackBar 消息。
如何livedata
在Android中以正确的方式观察多个片段?
提前致谢。
kotlin - IO线程分派完成时在主线程中运行代码?
我正在使用实时数据。我想在 IO 中运行一些任意代码,然后在完成后,在主线程中运行一些任意代码。
在 JavaScript 中,您可以通过将 Promise 链接在一起来完成类似的事情。我知道 Kotlin 是不同的,但这至少是我理解的一个框架。
我有一个函数,有时会从 Main 调用,有时会从 IO 调用,但它本身不需要特殊的 IO 功能。从内部class VM: ViewModel()
:
在我看来,显而易见的方法是val a = fetchFromDb()
从 IO 执行,然后setVal(a)
退出该块并进入 Main。
有没有办法做到这一点?我看不出这个功能不存在的概念性原因。有没有什么想法
可以在 ViewModel 中运行?
请在上面适当的地方用“coroutine”替换“thread”。:)
android - Android 双向数据绑定仅以一种方式工作
我有视图模型:
我使用以下方法将它与片段布局连接起来:
在 onCreateView 方法的片段类中:
我可以EditText
从片段或 ViewModel 类中更改值,但是当我尝试onBtnClick
在 Logcat 中的 ViewModel 方法中获取值时,我收到消息:I/MyViewModel: user:
我在这里缺少什么,以便双向数据绑定从其他方向呢?简而言之,数据从界面上的 ViewModel/ Fragment 流向 EditText,但它不会从界面上的 EditText 流向 ViewModel 字段/方法。提前致谢。
------- EDITED ----- 我设法填充了所有内容,但知道我收到了这个错误:
我想这是因为 viewmodel.user 是 LiveData 类型而不是 String 类型。我写了绑定适配器:
但我仍然收到上述消息。
android - 从 RxJava 嵌套链中的 LiveDataReactiveStreams.fromPublisher() 发布多个结果
让我们从一个基本示例开始,
假设我有以下代码块用于从存储库获取Auth Token
我在ViewModel中收到LiveData结果
在这一点上,一切都完美无缺。但是,当我想将 2 个请求合并在一起并为每个请求获取单独的LiveData时,问题就来了。假设我想在收到Token API的结果后调用Search API 。我的目标是为每个步骤获得 2次 LiveData事件更改。下面给出了演示我的要求的修改代码,
如何从给定的示例中接收 2 LiveData?
android - 使用 Handler PostDelayed 更改后 LiveData 未更新?
这是我的视图模型
我调试和检查,日志工作正常。
boolean 的第一个值设置正确,而第二个值设置不正确