以下是一个实现仅允许ViewModel存在于两个Fragment中的解决方案的代码示例:
class SharedViewModel : ViewModel() {
val data: MutableLiveData = MutableLiveData()
}
class FirstFragment : Fragment() {
private lateinit var sharedViewModel: SharedViewModel
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
// ...
sharedViewModel = ViewModelProvider(requireActivity()).get(SharedViewModel::class.java)
// ...
}
private fun updateData(data: String) {
sharedViewModel.data.value = data
}
// ...
}
class SecondFragment : Fragment() {
private lateinit var sharedViewModel: SharedViewModel
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
// ...
sharedViewModel = ViewModelProvider(requireActivity()).get(SharedViewModel::class.java)
sharedViewModel.data.observe(viewLifecycleOwner, Observer { data ->
// 更新UI或执行其他操作
})
// ...
}
// ...
}
通过这种方式,我们可以确保SharedViewModel只在这两个Fragment中存在,并且它们之间可以共享数据。