我正在试验 Architecture Components来自谷歌。具体来说,我想实现一个 ViewModelProvider.Factory创建一个带有构造函数参数的 ViewModel,如下所示:
class MyFactory(val handler: Handler) : ViewModelProvider.Factory {
override fun <T : ViewModel?> create(modelClass: Class<T>?): T {
return MyViewModel(handler) as T
}
}
我的 ViewModel 如下所示:
class MyViewModel(val handler: Handler) : ViewModel()
任何人都知道最后如何避免讨厌的 Actor 阵容:
return MyViewModel(handler) as T
最佳答案
你可以写:
class MyFactory(val handler: Handler) : ViewModelProvider.Factory {
override fun <T : ViewModel> create(modelClass: Class<T>): T {
return modelClass.getConstructor(Handler::class.java).newInstance(handler)
}
}
这适用于任何接受 Handler
作为构造函数参数的类,如果该类没有正确的构造函数,则会抛出 NoSuchMethodException
。
关于kotlin 中的 Android ViewModelProviderFactory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45514723/