【问题标题】:why LiveData observer return a previous data为什么 LiveData 观察者返回以前的数据
【发布时间】:2020-05-19 08:10:55
【问题描述】:

我有一个包含来自 API 的数据的 RecyclerView。 从 RecyclerView 按下一个项目后,将打开一个带有另一个 API 调用的新片段,在该片段中,我从按下的项目中获取基于 ID 的新数据。

当我按下第一个元素时,一切都很好 - OBSERVER 从 API 调用向我发送对象,并触发一次 - 好的。 问题是当我从 Recycler 中按下随机的第二个元素时,因为 OBSERVER 首先会触发之前调用的对象,然后会触发正确的对象。

其中一个解决方案是放置一个 IF 并仅监听第二个触发器,但在这种情况下,当我第一次按下时将无法正常工作,因为它只会触发一次,我将等待第二个触发器。

你知道如何让观察者只触发一次或每次触发两次吗?

【问题讨论】:

    标签: android android-livedata


    【解决方案1】:

    我在https://android.developreference.com/article/12191946/Why+LiveData+observer+is+being+triggered+twice+for+a+newly+attached+observer找到了一个很好的答案

    在上面的文章中有 2 个选项解决方案,对我来说,当您再订阅一次观察者时,我只使用了那个。因此,在我的情况下,我将 API 调用从新片段移至 recyclerview 片段,并在 Recyclerview 中完成了 2 个订阅,在新片段中完成了一个。现在它在 Recyclerview 片段中触发 2 次,在新片段中触发 1 次。

    【讨论】:

    • 我只是想将点击上面链接的用户指向stackoverflow上的原始来源。 R. Zagórski 的回答尤其帮助了我。
    【解决方案2】:

    确保您只创建一次 liveData,并确保您只订阅一次(而不是每次新闻)

    【讨论】:

    • ViewModel 仅创建一次 - 从调试器中我看到了这一点。
    • 我通过观察 - 观察(getViewLifecycleOwner().... -> 这意味着我订阅了一次,我认为 :)。如果我订阅更多次,我认为这应该是 - 我打开的 1 个项目将触发一次、2-两次、3-3 次....但我的情况是第一次和两次之后。
    • 重要的是这个observe发生在什么生命周期方法中。
    猜你喜欢
    • 1970-01-01
    • 2018-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多