安卓ViewModel观察员不工作?科特林



选项卡式活动的片段内部:

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的输出,Observerlambda仅在onCreateView()之后调用。

我确认MutableLiveData已更新,但未调用Observer{}lambda。我需要纠正我对ViewModels的看法吗?

编辑(解决方案(:使用"="操作员修改MutableLiveData值,以便观察者能够检测到它。甚至serverSetLiveData.value=serverSetLiveData.value也能完成这项工作。

观察者仅观察是否调用MutableLiveData的setValue((或postValue((方法

其中您正在为serverSetLiveData调用setValue((或postValue((函数。例如,代码中的serverSetLiveData.setValue(serverList(或serverSetLiveData.postValue(serverList.(。

Obervre只有在调用.value =时才会被触发

最新更新