无法从片段访问 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 文件中。
可能它有一个我看不到的简单解决方案。我有一个带有 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 文件中。