我正在尝试遵循 Kotlin 中 ViewModels 的官方 Android 指南。
我直接复制粘贴最简单的官方示例 https://developer.android.com/topic/libraries/architecture/viewmodel#kotlin但语法似乎不合法。
这部分会导致问题:
private val users: MutableLiveData<List<User>> by lazy {
MutableLiveData().also {
loadUsers()
}
}
预览给我这个错误:
Property delegate must have a 'getValue(DashViewModel, KProperty*>)' method. None of the following functions is suitable.
如果我想启动该应用程序,我会收到此错误:
Type inference failed: Not enough information to infer parameter T in constructor MutableLiveData<T : Any!>()
Please specify it explicitly.
我不明白这两个错误和其他具有相同错误的问题似乎是由不同的原因引起的。我的猜测是MutableLiveData().also
导致问题但我不知道为什么。考虑到这是一个官方示例,这很奇怪。
您似乎没有声明User
class.
第二个问题是另一个文档错误 https://issuetracker.google.com/issues/161034218,并且您需要提供类型MutableLiveData
构造函数调用。
所以,这有效:
package com.commonsware.myapplication
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
class User
class MainViewModel : ViewModel() {
private val users: MutableLiveData<List<User>> by lazy {
MutableLiveData<List<User>>().also {
loadUsers()
}
}
fun getUsers(): LiveData<List<User>> {
return users
}
private fun loadUsers() {
// Do an asynchronous operation to fetch users.
}
}
考虑到这是一个官方示例,这很奇怪。
一般来说,将它们视为一种技术的说明,不一定是您要复制并粘贴到项目中的东西。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)