返回

巧用ViewModel在Fragment中调用同源数据

Android

在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中调用同源数据。这种方法有助于提高应用的健壮性和可维护性,并简化数据共享和操作。