使用Android ViewModel无法正常工作

时间:2018-12-10 15:25:07

标签: android kotlin

使用此代码获取设备数据时,它可以很好地工作。但是,当进行任何配置更改(方向更改)时,加载会重新开始,而不是传递已经加载的数据。

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
})

1 个答案:

答案 0 :(得分:1)

我需要进一步了解您的代码,但是您的代码可能无法正常工作,因为您要传递this,并且应该将this.activity传递给ViewModelProvider,像这样:

myviewModel = ViewModelProvider.of(this.activity).get(MyViewModel::class.java)
myviewmodel.data({this.lifecycle}, { data -> Log.d("NEWDATA", data) }

假设dataLiveData对象。 应该对要共享数据的每个ViewModelProvider进行此操作,例如,如果要在绑定到同一活动的两个不同片段之间共享数据,则应在两个片段上分别调用ViewModelProvider.of(this.activity)