获取 ViewModel ViewModelProvider.Factory 和应用程序上下文

Get ViewModel ViewModelProvider.Factory and Application Context

我正在扩展 AndroidViewModel 以在我的 ViewModel 中获取应用程序上下文,但现在我还想将一些参数传递给我的 ViewModel。 经过一些 google 搜索,我开始知道我可以使用 ViewModelProvider.Factory 获取我的 MyViewModel 的参数化构造函数,但如何获取应用程序上下文。

提前致谢。

从您的 activity 您可以使用:

科特林:

applicationContext

Java:

getApplication().getApplicationContext()

您需要 ViewModel.Factory 中的 Application 来实例化 AndroidViewModel

实现此目标的方法

  • 如果您在 Activity/Fragment 中实例化 ViewModel,则执行 getApplicationContext() 并将其转换为 Application。如果在片段中,您可以获得托管 Activity 并从中获取应用程序。
// Kotlin code
viewModel = ViewModelProviders.of(this,
                ViewModel.Factory(activity?.application!!, param1, param2)) // from an fragment onViewCreated()
  • 如果您的应用程序有 Application class 公开获取应用程序实例的方法。
// JAVA code
public static Application getApp() {
        return YourApplication.instance; // instance will be an static field in Application class
    }