Внутри фрагмента с вкладками:
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
лямбда вызывается только после onCreateView()
.
Я подтвердил, что MutableLiveData обновляется, но Observer{}
лямбда не вызывается. Нужно ли корректировать мое представление о ViewModels?
РЕДАКТИРОВАТЬ (РЕШЕНИЕ): Используйте оператор "=", чтобы изменить значение MutableLiveData, чтобы наблюдатель мог его обнаружить. Даже serverSetLiveData.value=serverSetLiveData.value
сделал работу.