当我重新输入片段时,Android MutableLiveData 不断发射

Ami*_*ian 5 android android-fragments android-livedata android-viewmodel

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

这是 ViewModel 代码:

  val apiLessonData: MutableLiveData<String>> = MutableLiveData()
  fun getLessonsUserCreated() =
        apiCall(MyMaybeObserver(apiLessonData))
Run Code Online (Sandbox Code Playgroud)

在 MyMaybeObserver 中,我有这样的事情:

override fun onSuccess(t: T) {
    apiDataObserver.postValue(t)
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

现在当我第一次进入它工作正常但我第二次打开它时,它显示了一次的小吃,如何在不创建新的 ViewModel 的情况下停止它?

mar*_*yam 3

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