我有一个包含MutableLiveData
字段的BaseActivity
,如下所示
val refInfoLiveData: MutableLiveData<RefInfo?> by lazy { MutableLiveData<RefInfo?>() }
当调用MutableLiveData
的onStart
方法时,将进行网络调用以填充此BaseActivity
字段。
我还有几个Fragment
,它们是继承BaseActivity
的Activity
的一部分。
在这些片段中,我在片段的onResume
方法中进行了另一个调用,如下所示
(activity as BaseActivity).refInfoLiveData.observe(this, Observer {
it?.let { refInfo ->
adapter?.setRefInfo(refInfo)
}
})
当第一次创建片段时,observe
只调用了一次,但片段转到了后台,然后返回,它被调用了多次,这就导致了问题。
这个问题的原因是什么?我如何解决它?
任何帮助都将不胜感激。
发布于 2019-06-06 23:38:27
这是因为您应该在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) }
}
}
目前,如果你把应用程序放在后台,然后把它放在前台无数次,你就会有无限多的订阅者。
https://stackoverflow.com/questions/56480597
复制相似问题