巧用ViewModel在Fragment中调用同源数据
2023-12-24 15:07:06
在Android应用开发中,ViewModel是一种生命周期感知组件,用于管理UI相关数据,使其与UI生命周期分离,从而提高应用的健壮性和可维护性。ViewModel可以共享在多个Fragment或Activity之间,这使得数据可以在这些组件之间轻松地共享和同步。
在本文中,我们将探讨如何使用ViewModel在Fragment中调用同源数据。通过创建ViewModel工厂类和公开ViewModel接口,我们可以实现跨Fragment的数据共享和操作。
创建ViewModel工厂类
ViewModel工厂类负责创建ViewModel实例。通过创建自定义的ViewModel工厂类,我们可以自定义ViewModel的创建过程,并在需要时注入依赖项。
class BlankViewModelFactory : ViewModelProvider.Factory {
override fun <T : ViewModel> create(modelClass: Class<T>): T {
if (modelClass.isAssignableFrom(BlankViewModel::class.java)) {
return BlankViewModel() as T
}
throw IllegalArgumentException("Unknown ViewModel class")
}
}
在Activity中使用ViewModel工厂类
在Activity中,我们可以使用ViewModelProvider和ViewModel工厂类来创建ViewModel实例。
val viewModelFactory = BlankViewModelFactory()
val viewModel = ViewModelProvider(this, viewModelFactory).get(BlankViewModel::class.java)
在Fragment中使用ViewModel
在Fragment中,我们可以通过类似的方式来获取ViewModel实例。
val viewModelFactory = BlankViewModelFactory()
val viewModel = ViewModelProvider(requireActivity(), viewModelFactory).get(BlankViewModel::class.java)
向外暴露出ViewModel接口
为了在Fragment之间共享数据,我们可以向外暴露出ViewModel接口。
interface BlankViewModelInterface {
fun addOne()
}
实现ViewModel接口
在ViewModel中,我们可以实现ViewModel接口并提供数据操作方法。
class BlankViewModel : ViewModel(), BlankViewModelInterface {
override fun addOne() {
// 数据操作逻辑
}
}
在Fragment中调用ViewModel方法
在Fragment中,我们可以使用ViewModel接口来调用ViewModel中的数据操作方法。
viewModel.addOne()
总结
通过使用ViewModel工厂类、向外暴露出ViewModel接口并实现接口,我们可以轻松地在Fragment中调用同源数据。这种方法有助于提高应用的健壮性和可维护性,并简化数据共享和操作。