, чтобы дать вам пример того, что я хочу, это мой код mainViewModel перед использованием Firebase для сохранения моих данных:
package com.example.newrecyclerview
import android.util.Log
import androidx.lifecycle.viewModelScope
import kotlinx.coroutines.*
import java.lang.Exception
import androidx.lifecycle.*
class MainViewModel : ViewModel() {
private val _listPaysLiveData = MutableLiveData(listOf(
Pays("France", "url"),
Pays("Allemagne", "url"),
Pays("Italie", "url"),
Pays("Espagne", "url")
))
val searchLiveData = MutableLiveData<String>("")
val listPaysLiveData : LiveData<List<Pays>> = _listPaysLiveData
val filterPaysLiveData = Transformations.map(listPaysLiveData.combineLatest(searchLiveData)) {
if(it.second.isEmpty()) it.first else {
it.first.filter { pays -> Regex(it.second).containsMatchIn(pays.nom) }
}
}
fun removePays(paysToRemove: Pays) {
val pays = _listPaysLiveData.value ?: return
_listPaysLiveData.value = pays.filter { it != paysToRemove }
}
fun onAdd(pays: Pays) {
val addPays: List<Pays> = _listPaysLiveData.value ?: return
_listPaysLiveData.value = addPays + pays
}
fun updatePays(indexToUpdate: Int, newPays: Pays) {
val paysUpdate: List<Pays> = _listPaysLiveData.value ?: return
_listPaysLiveData.value = paysUpdate.mapIndexed { index, basicPays -> if (index == indexToUpdate) newPays else basicPays }
}
fun paysFilterBack(paysNom: String) { //SEARCH BAR
searchLiveData.value = paysNom
}
}
fun <A, B> LiveData<A>.combineLatest(b: LiveData<B>): LiveData<Pair<A, B>> {
return MediatorLiveData<Pair<A, B>>().apply {
var lastA: A? = null
var lastB: B? = null
addSource(this@combineLatest) {
if (it == null && value != null) value = null
lastA = it
if (lastA != null && lastB != null) value = lastA!! to lastB!!
}
addSource(b) {
if (it == null && value != null) value = null
lastB = it
if (lastA != null && lastB != null) value = lastA!! to lastB!!
}
}
}
, а также код, позволяющий мне наблюдать за любыми изменениями и обновлять данные:
rv_pays.layoutManager = LinearLayoutManager(requireActivity(), LinearLayoutManager.VERTICAL, false)
mainViewModel.filterPaysLiveData.observe(requireActivity(), Observer {
paysAdapter.submitList(it)
})
Теперь я хотел бы иметь возможность восстановить эти данные таким же образом и также наблюдать их, но на этот раз, восстанавливая данные, которые у меня есть в моей базе данных Firebase в реальном времени. Проблема в том, что обратите внимание на эти данные, это должен быть MutableList, и я также могу применить MutableLiveData, и снова ему нужен список, до сих пор мне только удавалось имитировать это поведение, добавлять элемент в базу данных Firebase, но я никогда не мог на самом деле читать / изменять / удалять данные, включенные в Firebase, как вы думаете? всегда ли мне нужно использовать наблюдение или в этот раз будет иначе, чтобы получить то, что я хочу сделать? спасибо всем