我有一个 BaseActivity
,它有一个 MutableLiveData
字段,如下所示
val refInfoLiveData: MutableLiveData<RefInfo?> by lazy { MutableLiveData<RefInfo?>() }
当 BaseActivity
的 onStart
方法被调用时,将进行网络调用以填充此 MutableLiveData
字段。
我还有几个 Fragment
,它们是继承 BaseActivity
的 Activity
的一部分。
在这些 fragment 中,我在 fragment 的 onResume
方法中进行另一个调用,如下所示
(activity as BaseActivity).refInfoLiveData.observe(this, Observer {
it?.let { refInfo ->
adapter?.setRefInfo(refInfo)
}
})
当第一次创建 fragment 时,observe
只被调用一次,但 fragment 进入后台然后返回,它被调用多次,这会导致问题。
这个问题可能是什么原因,我该如何解决?
如有任何帮助,我们将不胜感激。
最佳答案
那是因为你应该在 onViewCreated
中使用 observe(viewLifecycleOwner, Observer { ...
。
import androidx.lifecycle.observe
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
(activity as BaseActivity).refInfoLiveData.observe(viewLifecycleOwner) { refInfo ->
refInfo?.let { adapter.setRefInfo(it) }
}
}
目前,如果您将应用置于后台然后无限次将其置于前台,您将拥有无限数量的订阅者。
关于多次调用 Android LiveData observe,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56480597/