使用此代码获取设备数据时,它可以很好地工作。但是,当进行任何配置更改(方向更改)时,加载会重新开始,而不是传递已经加载的数据。
class DevicesViewModel(app: Application) : AndroidViewModel(app) {
val data = DevicesLiveData()
inner class DevicesLiveData : LiveData<List<Device>>() {
init {
SpecsUtils.devicesListLimit { value = it }
}
}
}
我做错什么了吗?我遵循了有关Medium的一些教程。
我记得,ViewModel和LiveData旨在承受配置更改和生命周期事件的影响,因此数据应仅加载一次。
修改
我正在这样获取ViewModel
ViewModelProviders.of(this).get<DevicesViewModel>().data.observe(this, Observer {
adapter.devices = it
})
答案 0 :(得分:1)
我需要进一步了解您的代码,但是您的代码可能无法正常工作,因为您要传递this
,并且应该将this.activity
传递给ViewModelProvider
,像这样:
myviewModel = ViewModelProvider.of(this.activity).get(MyViewModel::class.java)
myviewmodel.data({this.lifecycle}, { data -> Log.d("NEWDATA", data) }
假设data
是LiveData
对象。
应该对要共享数据的每个ViewModelProvider进行此操作,例如,如果要在绑定到同一活动的两个不同片段之间共享数据,则应在两个片段上分别调用ViewModelProvider.of(this.activity)