当我重新输入 fragment 时,Android MutableLiveData 不断发出信号

标签 android android-fragments android-livedata android-viewmodel

我在导航组件中使用共享 ViewModel,而不是为每个 fragment 创建 ViewModel(主要是因为它更容易),但现在当我重新输入 fragment 并订阅该 fragment 的 ViewModel 实时数据时遇到问题,我也得到了最后的状态。

这是 ViewModel 代码:

  val apiLessonData: MutableLiveData<String>> = MutableLiveData()
  fun getLessonsUserCreated() =
        apiCall(MyMaybeObserver(apiLessonData))

在 MyMaybeObserver 中,我有这样的东西:

override fun onSuccess(t: T) {
    apiDataObserver.postValue(t)
}

这就是我在 fragment 中观察它的方式:

private val apiAddGoalData = Observer<String> { response ->
    showSnack(response)
}

override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        .
        .
        viewModel.apiAddGoalData.observe(viewLifecycleOwner, apiAddGoalData)
        .
        .
    }

现在,当我第一次进入时,它工作正常,但我第二次打开它时,它显示了上一次的零食,如何停止而不创建它新的 View 模型?

最佳答案

以简单的方式,在观察者的 onchange 方法中获取数据后,您可以为 MutableLiveData 设置 null 。欲了解更多信息,您可以阅读这篇文章:livedata-with-snackbar-navigation-and-other-events-the-singleliveevent-case 。您也可以看到这个问题也许对您有帮助:How to clear LiveData stored value?

关于当我重新输入 fragment 时,Android MutableLiveData 不断发出信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58465244/

相关文章:

androidx 数据绑定(bind)生命周期 NullPointerException

java - ViewModel 没有零参数构造函数错误 - 即使它具有零参数构造函数

android - 如何在对 recyclerview 项目执行单击时更新 viewModel 的实时数据

android - 在android中实现搜索

Android:在 SearchView 中输入文本时防止弹出文本字段

android - 尝试使用 FragmentActivity 时无法访问 ActivityCompat Api 23

java - 抽屉项目名称显示为 0

android - SwipeDismissBehavior 动画问题

android - 在android中修剪aac-mp4音频(mediaCodec/extractor)

java - RecyclerView 中的 CardView 垂直滚动