为了实现你想要做的事情,你需要三件事。将值发布到ViewModel
、 aViewModel
的活动/片段,以及将从 中检索数据的活动/片段ViewModel
。假设您的数据存储在一个 中ArrayList
,并且您想从不同的片段中更新和检索它。
首先,我们必须实现一个ViewModel
. 它包含您要在活动/片段之间共享的数据。您将其声明MutableLiveData
为ArrayList
然后对其进行初始化。
class testviewmodel : ViewModel() {
val list: MutableLiveData<ArrayList<String>> = MutableLiveData()
init {
list.value = arrayListOf()
}
}
我们的下一步是访问和更新ArrayList
使用您的活动:
val viewmodel = ViewModelProviders.of(this).get(testviewmodel::class.java)
// update the array in Viewmodel
viewmodel.list.postValue(yourarray)
如果您使用 aFragment
来更新它,请使用以下命令:
activity?.let {
val viewmodel = ViewModelProviders.of(it).get(testviewmodel::class.java)
// update the array in Viewmodel
viewmodel.list.postValue(yourarray)
}
最后,要从ViewModel
片段中检索数据,请将其放入您的onViewCreated
:
activity?.let {
val viewmodel = ViewModelProviders.of(it).get(Dbviewmodel::class.java)
observeInput(viewmodel)
}
把它放在你的外面onViewCreated
:
private fun observeInput(viewmodel: testviewmodel ) {
viewmodel.list.observe(viewLifecycleOwner, Observer {
it?.let {
if (it.size > 5) {
pos = it[5]
//grab it
Toast.makeText(context,pos,Toast.LENGTH_LONG).show()
//display grabbed data
}
}
})
}
查看此文档以获取有关ViewModels
Good Luck 的更多信息!我希望这有帮助 :)