Android ViewModel наблюдатель не работает? Kotlin - PullRequest
0 голосов
/ 05 марта 2020

Внутри фрагмента с вкладками:

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 сделал работу.

1 Ответ

0 голосов
/ 05 марта 2020

Наблюдатель наблюдает, только если вы вызываете метод setValue () или postValue () из MutableLiveData

, где вы вызываете функцию setValue () или postValue () для serverSetLiveData. например. serverSetLiveData.setValue (serverList) или serverSetLiveData.postValue (serverList). в коде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...