可能它有一个我看不到的简单解决方案。我有一个带有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({}