问题标签 [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 投票
1 回答
79 浏览

android - 将 LiveData 对象作为 ViewModel 的参数公开还是由成员函数调用返回更好?

通常在 ViewModel 中使用 MutableLiveData,然后 ViewModel 只向观察者公开不可变的 LiveData 对象。 https://developer.android.com/topic/libraries/architecture/livedata#update_livedata_objects

将 LiveData 对象作为 ViewModel 对象的参数公开是否更好:

或者更确切地说,通过调用成员函数返回它:

所以在第一种情况下我可以写

而在后者

0 投票
0 回答
134 浏览

android - 具有多个异步资源的观察者 LiveData

如果多个数据源将值更新为相同LiveData并被视图观察到,我们该如何处理?

如果我们只想要用户单击的最后一个按钮的结果,并且因为网络调用可能有延迟,并且更新到视图的最终结果可能来自第一个调用。

单击 Button-A → 用于加载 API#1 → 将值发布到 → LiveData<> A

单击 Button-B → 用于加载 API#2 → 将值发布到 → LiveData<> A

ViewA → 观察者 → LiveData<> A

0 投票
1 回答
477 浏览

android - Android 双向数据绑定观察者调用两次

我正在学习使用以下示例中的数据绑定:

https://github.com/ResoCoder/databinding-with-livedata-tutorial

特别是,我在使用以下代码时遇到了问题:

https://github.com/ResoCoder/databinding-with-livedata-tutorial/blob/master/app/src/main/java/com/resocoder/databinding/MainActivity.kt

第 29 行有一个 Toast:

Toast.makeText(this, it, Toast.LENGTH_SHORT).show()

如果以编程方式更改了 editTextContent,则会调用两次 toast。您可以通过按下标记为“SELECT RANDOM FRUIT FROM EDITTEXT”的按钮重现此行为

在这个例子中,两次调用观察者是浪费的,因为它显示了两次吐司,但在我的应用程序中,它给用户带来了一个严重的问题,因为如果数据以编程方式与用户发生变化,我会执行不同的操作。

我尝试通过将状态标记为程序性更改来缓解问题,但是在我的代码完成之后会出现无关的第二次调用。调用看起来好像用户正在编辑文本,所以我的程序执行操作就像用户输入数据一样。我看不出有什么方法可以区分无关调用和用户输入数据之间的区别。

请不要建议我隐藏条目的值,如果它没有改变,请忽略无关的调用。有一个合法的用例,用户在字段中输入完全相同的值。

理想情况下,找到无关呼叫的原因并消除它是解决问题和提高效率的最佳方式。不太理想的是一种解决方法,因此我可以忽略第二次调用,以便我的代码正常工作。

我怀疑这与设置适配器有关,或者可能与我设置观察者的时间/地点有关,但这是一个猜测。

谢谢。

0 投票
1 回答
285 浏览

android - 如何在观察实时数据的值时修复“resp”的空指针

我的代码适用于视图模型,但是当我开始使用实时数据观察值时

r inresp=r的类型从RespCategoriesto更改为RespCategories? 与寻呼机适配器的参数不匹配,因此我对其进行了一些更改,例如转换 var resp: RespCategories为, var resp: RespCategories? = null因此在观察r->resp=rresp 值为 null 时出现了一个新问题。如何解决问题?

主要活动

0 投票
0 回答
337 浏览

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 的东西。因为它永远都是假的。

0 投票
1 回答
474 浏览

android - 更改改造响应时,Mediator Live 数据未更新

我在我的应用程序中使用 MVVM 架构组件。任务是使用 MVVM 添加改造。

我每隔 10 秒调用一次网络服务器以获取响应数据。要更新此值,我正在使用 Mediator 实时数据。这是它的代码

即使响应发生了变化,我也面临着获取更新值的问题。

以及如何在调用此方法时显示进度条并在我的视图模型中显示错误(如果有)。

0 投票
2 回答
8810 浏览

android - 具有多个不同类型来源的 LiveData

我目前有一个项目,其中包含一个列表MyItem,并使用 Firebase/LiveData。它分为组,每个组都有项目。

如果发生以下任何情况,我希望能够更新此列表:

  1. 更新项目(通过 Firebase 在后端)
  2. 更改了过滤器(Firebase 上每个用户的单独表格)
  3. 已为项目添加书签(Firebase 上每个用户的单独表格)

要获取内容列表,我有一个类似这样的函数来返回 LiveData,该函数将在更新项目时更新(#1)。

数据库

在我的 ViewModel 中,我有处理这种情况的逻辑。

视图模型

逻辑很复杂,很难理解。有没有更好的方法来构建它来处理多个不同的变化?存储用户当前过滤器的最佳方式是什么?

谢谢。

0 投票
0 回答
275 浏览

android - 条件通过时调用函数 - ViewModel、LiveData、Transformations

我想在 ViewModel 中调用一个函数,该函数在值不为 0 时不返回任何内容。

这是我到目前为止的代码,但它没有被触发。

我需要这个,因为 categoryId 在 init 方法调用之后获取它的值。

0 投票
1 回答
615 浏览

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:

0 投票
1 回答
2567 浏览

viewmodel - MutableLiveData 不通知观察者

我正在尝试使用MutableLiveData数据库中的预填充值,但Observer始终返回nullbook. 我需要将其保留为MutableLiveData, NOT LiveData,因为我必须在某些地方以编程方式设置它。因此,我正在调用从数据库setValue中检索到的内容。LiveData代码:

ViewModel

Fragment

有人可以告诉我为什么Book观察者为空吗?我认为当完成并检索值Observer时会收到通知。bookRep.getBookLiveData()感谢您的帮助。