如何解决带有应用程序上下文和 Fragment 中额外参数的 ViewModel
我们知道,为了访问 Application
上下文,例如需要查找资源字符串或系统服务,我们使用 Androidviewmodel
扩展我们的 viewmodel,同时将额外的参数传递给 viewmodel 需要一个扩展 {{ 1}}。我的问题是,当您使用 viewmodelProvider.NewInstanceFactory()
时,您不需要在构建 viewmodel 时将 Androidviewmodel
作为参数传递,但在使用工厂时,您需要将应用程序上下文与额外参数一起传递。
当只使用 Application
时,getActivity().getApplication() 是否在内部完成?
是否可以将 Fragment 中的 Androidviewmodel
显式传递给您的 viewmodel 工厂?
样品
只需要应用上下文的viewmodel
getActivity().getApplication()
上面的viewmodel可以像默认方式一样在Fragment中构建。
class Assetviewmodel(application: Application) : Androidviewmodel(application) {
}
但是对于工厂,您会这样做
val assetviewmodel = viewmodelProvider(this).get(Assetviewmodel::class.java)
然后像这样构造它并依赖Activity
class NewsVideoviewmodelFactory(private val application: Application,private val baseUrl: String) : viewmodelProvider.NewInstanceFactory() {
override fun <T : viewmodel?> create(modelClass: Class<T>): T {
@Suppress("UNCHECKED_CAST")
return NewsVideoviewmodel(application,baseUrl) as T
}
}
class NewsVideoviewmodel(application: Application,baseUrl: String) : Androidviewmodel(application){
}
这是否正确且不违反使用 viewmodel 的概念或最佳实践?
解决方法
在java中,通过AndroidViewModel
创建ViewModel时,必须传递Application参数,所以对于问题:
getActivity().getApplication() 是否在内部完成 使用 AndroidViewModel?
您已明确地将应用程序上下文传递给 AndroidViewModel
。在那个类中有一个方法 getApplication()
来接收传递的参数。第二个:
显式传入getActivity().getApplication()可以吗 片段到您的 ViewModel 工厂?
完全没问题
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。