простой способ изменить значение элемента списка внутри livedata

#android #android-livedata #android-jetpack #android-mvvm #mutablelivedata

Вопрос:

У меня есть полный список сообщений(цитата) в моем представлении переработчика. Для каждого поста есть кнопка «Нравится», и когда мне нравится, я хочу показать кнопку «Сердце», заполненную, как в instagram.

Приведенный ниже код находится внутри моей модели представления. Всякий раз, когда я нажимаю кнопку «Нравится», я нахожу сообщение с цитатой, на которое нажимается «Нравится», а затем меняю значение isLiked логического значения. И после этого вызывается функция наблюдения, и вид переработчика вычисляет различия между старым и новым списком. И это работает. Но я не уверен, что это правильный способ измениться. Есть ли какой-нибудь правильный способ сделать это?

 private val _quotes = MutableLiveData<DataState<QuotesResponse>>()
    val quotes: LiveData<DataState<QuotesResponse>>
        get() = _quotes

fun toggleLike(quote: Quote) = viewModelScope.launch(Dispatchers.IO) {
        if (hasInternetConnection()) {
            try {
                _likeQuote.postValue(DataState.Loading())
                _quotes.value?.data?.quotes?.find { q -> q.id == quote.id }?.let {
                    it.isLiked = !quote.isLiked
                }

                // My Api call here

                _likeQuote.postValue(handledResponse)
            } catch (e: Exception) {
                _likeQuote.postValue(DataState.Fail())
            }
        } else {
            _likeQuote.postValue(DataState.Fail(message = "No internet connection"))
        }

    }
 

Комментарии:

1. Управление Нравится/не нравится с помощью базы данных комнат, чтобы уменьшить вызов API при нажатии, а затем синхронизировать эти данные с сервером в определенное время.