Android 无法在Kotlin中创建类ViewModel的实例
我试图在片段中初始化viewmodel,但每次我想在viewmodel构造函数中传递接口时,它都会抛出错误无法创建类viewmodel的实例 另外,我在kotlin kapt或任何生命周期注释方面没有任何问题 这是我的ViewModel课程Android 无法在Kotlin中创建类ViewModel的实例,android,kotlin,constructor,viewmodel,Android,Kotlin,Constructor,Viewmodel,我试图在片段中初始化viewmodel,但每次我想在viewmodel构造函数中传递接口时,它都会抛出错误无法创建类viewmodel的实例 另外,我在kotlin kapt或任何生命周期注释方面没有任何问题 这是我的ViewModel课程 class SettingsViewModel ( var settingsView: SettingsView ) : ViewModel(){ } 这是我想初始化viewmodel的片段 class SettingsFragmen
class SettingsViewModel (
var settingsView: SettingsView
) : ViewModel(){ }
这是我想初始化viewmodel的片段
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
}
class SettingsFragment:Fragment(),SettingsView{
var viewmodel:设置viewmodel?=null
重写创建时的乐趣(savedInstanceState:Bundle?){
super.onCreate(savedInstanceState)
}
覆盖创建视图(
充气器:布局充气器,容器:视图组?,
savedInstanceState:捆绑?
):查看{
//为该碎片膨胀布局
viewmodel=ViewModelProviders.of(this.get)(setingsviewmodel(this)::class.java)
缬氨酸结合=
DataBindingUtil.充气(充气机,R.layout.fragment\u设置,容器,错误)
.apply{}
返回binding.root
}
在没有工厂的情况下通过ViewModelProviders初始化ViewModel时,这意味着您只能实例化没有构造函数参数的ViewModel。如下所示:
viewmodel = ViewModelProviders.of(this).get(SettingsViewModel::class.java)
请注意,您不能将参数传递给.class调用,因为您没有调用构造函数
由于ViewModel具有构造函数参数,您需要实现ViewModelProvider.Factory,以便能够使用给定参数检索其实例
以下是对android开发人员的参考:
这里引用的一篇文章可以让您深入了解如何实现工厂:在我的例子中,我忘了添加
AndroidInjection.inject(this);
在我这样的活动中:
@Override
public void onCreate(Bundle savedInstanceState) {
AndroidInjection.inject(this);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
不要在viewmodel类中传入视图。还要更新您的类,如“类设置viewmodel:viewmodel().ViewModel的唯一职责是管理UI的数据。它不应该访问您的视图层次结构或保留对活动或片段的引用。永远不要在ViewModel类中传递任何视图。这是否也适用于接收应用程序参数的
AndroidViewModel
?它已被弃用。请使用新的更新。