获取 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
}
我正在扩展 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
}