首页 > 解决方案 > 无法从片段访问 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 

}

谢谢您的帮助!

编辑:它有一个简单的解决方案,我没有将视图模型投射到视图模型类,感谢大家的帮助

标签: androidkotlinviewmodel

解决方案


您正在将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 文件中。

https://developer.android.com/kotlin/ktx


推荐阅读