android - 无法从片段访问 ViewModel 方法
问题描述
可能它有一个我看不到的简单解决方案。我有一个带有 ViewModel 的片段,Viewmodel 里面有一个方法,我想从我的片段中调用它并为其提供参数。但是当我尝试调用该方法时,它显示错误“未解决的参考”
class DetailFragmentViewModel : ViewModel() {
private val repo = Crepository.get()
private val itemIdlivedata = MutableLiveData<UUID>()
var crimeLiveDate: LiveData<Crime?> = Transformations.switchMap(itemIdlivedata){ it ->
repo.getitem(it) }
fun LoadItem(itemuuid:UUID){
itemIdlivedata.value = itemuuid
}
}
片段类:
private val crimeDetailVM : ViewModel by lazy {
ViewModelProvider(this).get(DetailFragmentViewModel::class.java)
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
...
crimeDetailVM.LoadItem <- Unsolved Reference
}
谢谢您的帮助!
编辑:它有一个简单的解决方案,我没有将视图模型投射到视图模型类,感谢大家的帮助
解决方案
您正在将DetailFragmentViewModel向下转换为 ViewModel。这就是您不访问 DetailFragmentViewModel 方法的原因。
利用
private val crimeDetailVM : DetailFragmentViewModel by lazy {
ViewModelProvider(this).get(DetailFragmentViewModel::class.java)
}
代替
private val crimeDetailVM : ViewModel by lazy {
ViewModelProvider(this).get(DetailFragmentViewModel::class.java)
}
这种方式也不是惯用的,我建议您使用 kotlin 扩展
val viewModel by viewModels<DetailFragmentViewModel>()
但在此之前,您需要将 Fragment KTX 依赖项添加到您的应用程序 gradle 文件中。
推荐阅读
- mysql - 如何使用 apt 包管理器安装特定的 MySQL
- ios - Algolia InstantSearch iOS 不会在每次击键时更新数据
- android - Android Lint 命令行工具不解析 Kotlin 文件
- ruby - 如何在 Ruby 中向 Azure 服务总线主题发送和接收消息
- java - 处理服务层结果的正确模式
- r - wru 包中的 Predict_race 函数即使使用帮助页面中的示例数据也会返回“未使用的参数”错误
- git - “EROR GITBash”bash:意外标记“换行符”附近的语法错误
- visual-studio-code - 为什么 Visual Studio Code 不自动关闭括号
- django - Django:如何在 Django 模型中计算总小时数
- cassandra - gremlin 和 janusgraph 中的 OperationTimedOutException,同时将其与在 docker-container 中运行的 scylla 连接