问题标签 [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 - 将 LiveData 对象作为 ViewModel 的参数公开还是由成员函数调用返回更好?
通常在 ViewModel 中使用 MutableLiveData,然后 ViewModel 只向观察者公开不可变的 LiveData 对象。 https://developer.android.com/topic/libraries/architecture/livedata#update_livedata_objects
将 LiveData 对象作为 ViewModel 对象的参数公开是否更好:
或者更确切地说,通过调用成员函数返回它:
所以在第一种情况下我可以写
而在后者
android - 具有多个异步资源的观察者 LiveData
如果多个数据源将值更新为相同LiveData
并被视图观察到,我们该如何处理?
如果我们只想要用户单击的最后一个按钮的结果,并且因为网络调用可能有延迟,并且更新到视图的最终结果可能来自第一个调用。
单击 Button-A → 用于加载 API#1 → 将值发布到 → LiveData<> A
单击 Button-B → 用于加载 API#2 → 将值发布到 → LiveData<> A
ViewA → 观察者 → LiveData<> A
android - Android 双向数据绑定观察者调用两次
我正在学习使用以下示例中的数据绑定:
https://github.com/ResoCoder/databinding-with-livedata-tutorial
特别是,我在使用以下代码时遇到了问题:
第 29 行有一个 Toast:
Toast.makeText(this, it, Toast.LENGTH_SHORT).show()
如果以编程方式更改了 editTextContent,则会调用两次 toast。您可以通过按下标记为“SELECT RANDOM FRUIT FROM EDITTEXT”的按钮重现此行为
在这个例子中,两次调用观察者是浪费的,因为它显示了两次吐司,但在我的应用程序中,它给用户带来了一个严重的问题,因为如果数据以编程方式与用户发生变化,我会执行不同的操作。
我尝试通过将状态标记为程序性更改来缓解问题,但是在我的代码完成之后会出现无关的第二次调用。调用看起来好像用户正在编辑文本,所以我的程序执行操作就像用户输入数据一样。我看不出有什么方法可以区分无关调用和用户输入数据之间的区别。
请不要建议我隐藏条目的值,如果它没有改变,请忽略无关的调用。有一个合法的用例,用户在字段中输入完全相同的值。
理想情况下,找到无关呼叫的原因并消除它是解决问题和提高效率的最佳方式。不太理想的是一种解决方法,因此我可以忽略第二次调用,以便我的代码正常工作。
我怀疑这与设置适配器有关,或者可能与我设置观察者的时间/地点有关,但这是一个猜测。
谢谢。
android - 如何在观察实时数据的值时修复“resp”的空指针
我的代码适用于视图模型,但是当我开始使用实时数据观察值时
r inresp=r
的类型从RespCategories
to更改为RespCategories?
与寻呼机适配器的参数不匹配,因此我对其进行了一些更改,例如转换 var resp: RespCategories
为, var resp: RespCategories? = null
因此在观察r->resp=r
resp 值为 null 时出现了一个新问题。如何解决问题?
主要活动
android - LiveData 和 Transformations.switchMap 崩溃
我有一个应用程序,我想在其中添加某种状态,如果添加,我希望我的 UI 显示一个小吃栏,说明它已添加。我有一个存储库,可以在其中添加我的状态。如果成功,我会将值发布回我的 ViewModel。由于它是一个小吃店,我只想显示一次,所以如果我再次尝试添加状态,它不会达到它之前的状态。
所以我正在尝试实施本文推荐的方法:https ://medium.com/androiddevelopers/livedata-with-snackbar-navigation-and-other-events-the-singleliveevent-case-ac2622673150
所以我已经将 Event 类添加到我的项目中。
然后我的存储库看起来像这样:
在我的 ViewModel 中,我像这样收听这个 LiveData:
DataHolder 类和 AbstractRepositoryCallback 只是我们为使东西更通用而创建的一些类,所以不要介意。
无论如何,当我尝试在此处添加状态时,出现以下错误:
希望有人能帮助我解决这里发生的事情,我是这个 LiveData 的新手,但我已经遵循了一些关于如何使用它的指南,大多数人说这个 Event 类对 Snackbars 等很有用,这似乎是大多数例子是从 ViewModel 到 Fragment/Activity,而不是之前。
我每次都打开一个新的 ViewModel,所以它被破坏了,所以我不能从 ViewModel 中保留 getContentIfNotHandled 的东西。因为它永远都是假的。
android - 更改改造响应时,Mediator Live 数据未更新
我在我的应用程序中使用 MVVM 架构组件。任务是使用 MVVM 添加改造。
我每隔 10 秒调用一次网络服务器以获取响应数据。要更新此值,我正在使用 Mediator 实时数据。这是它的代码
即使响应发生了变化,我也面临着获取更新值的问题。
以及如何在调用此方法时显示进度条并在我的视图模型中显示错误(如果有)。
android - 具有多个不同类型来源的 LiveData
我目前有一个项目,其中包含一个列表MyItem
,并使用 Firebase/LiveData。它分为组,每个组都有项目。
如果发生以下任何情况,我希望能够更新此列表:
- 更新项目(通过 Firebase 在后端)
- 更改了过滤器(Firebase 上每个用户的单独表格)
- 已为项目添加书签(Firebase 上每个用户的单独表格)
要获取内容列表,我有一个类似这样的函数来返回 LiveData,该函数将在更新项目时更新(#1)。
数据库
在我的 ViewModel 中,我有处理这种情况的逻辑。
视图模型
逻辑很复杂,很难理解。有没有更好的方法来构建它来处理多个不同的变化?存储用户当前过滤器的最佳方式是什么?
谢谢。
android - 条件通过时调用函数 - ViewModel、LiveData、Transformations
我想在 ViewModel 中调用一个函数,该函数在值不为 0 时不返回任何内容。
这是我到目前为止的代码,但它没有被触发。
我需要这个,因为 categoryId 在 init 方法调用之后获取它的值。
java - 使用 Livedata 并在显示 MutableLiveData 时遇到问题结果
我只是在测试 Android 架构组件的 ViewModel 和 LiveData。我有一个带有一个 EditText 的基本 Activity 从用户那里接收一个数字,当单击“转换”按钮时,Textview 应该将结果乘以 0.87。例如,当我在 EditText 中输入 100 并单击转换按钮时,它应该给出 87 的结果。但是当我单击转换按钮时,Textview 会给出“android.arch.lifecycle.MutableLiveData@eb84a7b”的值。当我旋转屏幕时,结果变为 87。请你看看我的代码并告诉我应该在哪里修改代码,以便在我单击转换按钮时结果给出数字?
ViewModelLiveDataActivity.java:
ViewModel2.java:
viewmodel - MutableLiveData 不通知观察者
我正在尝试使用MutableLiveData
数据库中的预填充值,但Observer
始终返回null
为book
. 我需要将其保留为MutableLiveData
, NOT LiveData
,因为我必须在某些地方以编程方式设置它。因此,我正在调用从数据库setValue
中检索到的内容。LiveData
代码:
ViewModel
:
Fragment
:
有人可以告诉我为什么Book
观察者为空吗?我认为当完成并检索值Observer
时会收到通知。bookRep.getBookLiveData()
感谢您的帮助。