【发布时间】:2021-05-28 12:40:05
【问题描述】:
这是我的 ViewModel 类
import android.content.Context
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
class ViewModel (private val context: Context) : ViewModel() {
private var leadslist = MutableLiveData<Response>()
init {
val Repository: Repository by lazy {
Repository
}
leadslist = Repository.getMutableLiveData(context)
}
fun getLeadsList(): MutableLiveData<Response> {
return leadslist
}
}
这是我在 Fragment 中的称呼方式。
viewmodel = ViewModelProvider(requireActivity()).get(ViewModel::class.java)
我知道已经有其他答案,但似乎没有任何效果。请帮忙。坚持了很长时间。
我也试过 ViewModelFactory。
ViewModelProvider(requireActivity(),ViewModelFactory(requireActivity())).get(ViewModel::class.java)
并将此代码用于 ViewModelFactory 类
import android.content.Context
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
class ViewModelFactory(private val context: Context) : ViewModelProvider.NewInstanceFactory() {
override fun <T : ViewModel?> create(modelClass: Class<T>): T {
return ViewModel(context) as T
}
}
还是不行。
然后我尝试了这个
viewmodel= ViewModelProvider.AndroidViewModelFactory(requireActivity().application)
.create(ViewModel::class.java)
然后它又没用了。
以及如何在我的 ViewModel 中创建这个零参数构造函数。 为什么我不能创建实例。
另外,使用其中一种方法我能够编译和运行,但 viewmodel.observe 函数没有执行。
请帮忙。谢谢。
【问题讨论】:
-
让你的类扩展
AndroidViewModel——到那时,你应该不再需要自定义工厂。我还建议将其命名为ViewModel以外的其他名称。 -
刚试过。它运行没有错误。但它不执行 ViewModel.observe ,因此我无法向我的适配器添加值。
标签: android android-fragments viewmodel