选项卡式活动的片段内部:
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
serverSetVM = ViewModelProvider(activity!!).get(ServersViewModel::class.java)
serverList = ArrayList(serverSetVM.get())
rv = rv_serverList // findViewById
rv.layoutManager = LinearLayoutManager(context)
rv.adapter = ServerListRevAdapter(context!! ,serverList)
serverSetVM.serverSetLiveData.observe(viewLifecycleOwner, Observer {
Log.v ("MainAct", "Inside OBSERVER")
serverList = ArrayList(serverSetVM.get())
rv.adapter!!.notifyDataSetChanged()
})
}
此外;
val serverSetLiveData = MutableLiveData<HashSet<Server>>() // Inside ViewModel class
observe()
函数似乎不起作用。当在同一片段内修改ServerSetVM
的值时(通过ViewModel类中定义的函数,即add()
(,recyclerView不会更新。根据Logcat的输出,Observer
lambda仅在onCreateView()
之后调用。
我确认MutableLiveData已更新,但未调用Observer{}
lambda。我需要纠正我对ViewModels的看法吗?
编辑(解决方案(:使用"="操作员修改MutableLiveData值,以便观察者能够检测到它。甚至serverSetLiveData.value=serverSetLiveData.value
也能完成这项工作。
观察者仅观察是否调用MutableLiveData的setValue((或postValue((方法
其中您正在为serverSetLiveData调用setValue((或postValue((函数。例如,代码中的serverSetLiveData.setValue(serverList(或serverSetLiveData.postValue(serverList.(。
Obervre只有在调用.value =
时才会被触发