无法从片段访问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添加到您的应用程序渐变文件中。

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

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

还可以使用ActivityViewModel扩展视图模型例如->类DetailFragmentViewModel(application:application(:AndroidViewModel(application({}