Android Navigation + LiveData停止观察片段何时进入后台



我有两个片段,我从Jetpack导航组件导航。当我从片段2返回到片段1时,我通过片段2的livedata触发一个事件,fragment1应该正在观察。虽然,片段1没有观察到,当它设置一个断点来检查liveData有多少观察者时,它说0。下列代码

class Fragment1 :
Fragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)

myViewModel.selectedItem.observe(viewLifecycleOwner, {
println("Observed")
})
findNavController().navigate(
Fragment1Directions.actionToFragment2()
)
}

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
myViewModel = ViewModelProvider(requireActivity()).get(MyViewModel::class.java)
}
private lateinit var myViewModel: MyViewModel

}

类Fragment2:片段(){

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)

myButton.setOnClickListener{
MyViewModel().selectItem(true)
findNavController().navigateUp()
}
}

}

类MyViewModel: ViewModel() {

private val mutableSelectedItem = MutableLiveData<Boolean>()
val selectedItem: LiveData<Boolean> get() = mutableSelectedItem
fun selectItem(value: Boolean) {
mutableSelectedItem.value = value
}

}

没有observer是很奇怪的
myViewModel.selectedItem.observe(viewLifecycleOwner, {
println("Observed")
})

当它被称为onViewCreatedviewLifecycleOwner时,但看起来你有一个错误,为Fragment1Fragment2创建共同的ViewModel

都应该使用

myViewModel = ViewModelProvider(requireActivity()).get(MyViewModel::class.java)得到相同的ViewModel