Al *_*hik 0 android constructor viewmodel kotlin
我正在尝试在 Fragment 中初始化视图模型,但是每次我想在我的视图模型构造函数中传递接口时,它都会抛出错误无法创建类 ViewModel 的实例 而且我在kotlin-kapt或任何生命周期注释中没有任何问题
这是我的 ViewModel 类
class SettingsViewModel (
var settingsView: SettingsView
) : ViewModel(){ }
Run Code Online (Sandbox Code Playgroud)
这是我要初始化视图模型的片段
class SettingsFragment : Fragment(), SettingsView {
var viewmodel :SettingsViewModel? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
}
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
viewmodel = ViewModelProviders.of(this).get(SettingsViewModel(this)::class.java)
val binding =
DataBindingUtil.inflate<FragmentSettingsBinding>(inflater, R.layout.fragment_settings, container, false)
.apply{}
return binding.root
}
Run Code Online (Sandbox Code Playgroud)
当您在没有工厂的情况下通过 ViewModelProviders 初始化 ViewModel 时,这意味着您只能实例化一个没有构造函数参数的 ViewModel。像这样:
viewmodel = ViewModelProviders.of(this).get(SettingsViewModel::class.java)
Run Code Online (Sandbox Code Playgroud)
请注意,您不能将参数传递给 .class 调用,因为您没有调用构造函数
由于您的 ViewModel 具有构造函数参数,您需要实现 ViewModelProvider.Factory 以便能够使用给定参数检索其实例。
这是对 android 开发者的参考:https : //developer.android.com/reference/android/arch/lifecycle/ViewModelProvider
这里参考了一篇文章,可以让你深入了解如何实现工厂:https : //medium.com/@marco_cattaneo/android-viewmodel-and-factoryprovider-good-way-to-manage-it-with-dagger -2-d9e20a07084c