Android 无法从片段访问ViewModel方法

Android 无法从片段访问ViewModel方法,android,kotlin,viewmodel,Android,Kotlin,Viewmodel,也许它有一个我看不到的简单解决方案。我有一个带有ViewModel的片段,ViewModel中有一个方法,我想从片段中调用该方法并为其提供参数。但当我尝试调用该方法时,它显示一个错误“未解决的引用” class DetailFragmentViewModel:ViewModel(){ private val repo=Crepository.get() private val itemIdlivedata=MutableLiveData() var crimeLiveDate:LiveData=

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

class DetailFragmentViewModel:ViewModel(){
private val repo=Crepository.get()
private val itemIdlivedata=MutableLiveData()
var crimeLiveDate:LiveData=Transformations.switchMap(itemIdlivedata){it->
repo.getitem(it)}
趣味加载项(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 

}
private val crimeDetailVM:ViewModel by lazy{
ViewModelProvider(this.get)(DetailFragmentViewModel::class.java)
}
重写创建时的乐趣(savedInstanceState:Bundle?){
super.onCreate(savedInstanceState)
...
crimeDetailVM.LoadItem您需要活动上下文
尝试:
ViewModelProvider(requireActivity()).get(DetailFragmentViewModel::class.java)

还可以使用“按活动扩展视图模型”视图模型
例如->类DetailFragmentViewModel(application:application):AndroidViewModel(applivation){}

您正在将DetailFragmentViewModel向下转换到ViewModel。这就是您不访问DetailFragmentViewModel方法的原因

使用

而不是

private val crimeDetailVM : ViewModel by lazy {
    ViewModelProvider(this).get(DetailFragmentViewModel::class.java)
}
同样,这种方式也不是惯用的,我建议您使用kotlin扩展

val viewModel by viewModels<DetailFragmentViewModel>()
val viewModel by viewModels()
但在此之前,您需要将依赖项Fragment KTX添加到您的app gradle文件中


您不是在为函数提供参数吗?
crimeDetailVM.LoadItem(myUUID)
。还是为了简洁起见省略了它?@Beko我想调用LoadItem()从片段中,Loaditem将从存储库中拉出livedata,因此我可以在片段中观察它,我不知道为什么我无法访问method@Beko谢谢,但这不是问题的原因,即使有参数,它也找不到方法
private val crimeDetailVM : ViewModel by lazy {
    ViewModelProvider(this).get(DetailFragmentViewModel::class.java)
}
val viewModel by viewModels<DetailFragmentViewModel>()