无法从片段访问 ViewModel 方法

Cannot access ViewModel method from fragment

可能它有一个我看不到的简单解决方案。我有一个带有 ViewModel 的片段,Viewmodel 中有一个方法,我想从我的片段中调用它并为其提供参数。但是当我尝试调用该方法时,它显示错误“Unsolved Reference”

 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
                          }
                  }

片段Class:

  private val crimeDetailVM : ViewModel by lazy {
    ViewModelProvider(this).get(DetailFragmentViewModel::class.java)
}
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
     ...

   crimeDetailVM.LoadItem <- Unsolved Reference 

}

感谢您的帮助!

编辑:它有一个简单的解决方案,我没有将视图模型转换为视图模型CLASS,感谢大家的帮助

您需要 activity 上下文 尝试: ViewModelProvider(requireActivity()).get(DetailFragmentViewModel::class.java)

您还可以使用 ActivityViewModel 扩展视图模型 例如-> class DetailFragmentViewModel(application:Application) : AndroidViewModel(applivation){}

您正在向下转换 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