Inside the fragment of a tabbed activity:
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()
})
}
Also;
val serverSetLiveData = MutableLiveData<HashSet<Server>>() // Inside ViewModel class
observe()
function does not seem to work. When the value of ServerSetVM
is modified inside the same fragment (by the functions defined in ViewModel class, i.e. add()
), recyclerView is not updated. According to Logcat output, Observer
lambda is called only after onCreateView()
.
I confirmed MutableLiveData gets updated but Observer{}
lambda is not called. Do I need to correct my notion about ViewModels?
EDIT (SOLUTION):
Use " = " operator to modify the MutableLiveData value so that observer can detect it. Even serverSetLiveData.value=serverSetLiveData.value
does the job.