#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 при нажатии, а затем синхронизировать эти данные с сервером в определенное время.