我有两个片段,我从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
}
}
myViewModel.selectedItem.observe(viewLifecycleOwner, {
println("Observed")
})
当它被称为onViewCreated
和viewLifecycleOwner
时,但看起来你有一个错误,为Fragment1
和Fragment2
创建共同的ViewModel
都应该使用
myViewModel = ViewModelProvider(requireActivity()).get(MyViewModel::class.java)
得到相同的ViewModel