可能它有一个我看不到的简单解决方案。我有一个带有 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
}
感谢您的帮助!
编辑:它有一个简单的解决方案,我没有将视图模型转换为视图模型类,谢谢大家的帮助
答案 0 :(得分:1)
您正在将 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 文件中。
答案 1 :(得分:0)
您需要活动上下文 尝试: ViewModelProvider(requireActivity()).get(DetailFragmentViewModel::class.java)
您也可以通过 ActivityViewModel 使用扩展视图模型 例如-> class DetailFragmentViewModel(application:Application) : AndroidViewModel(applivation){}