Если вы не используете привязку данных, вы можете попробовать что-то вроде этого. Создайте новое поле внутри вашего объекта данных, которое представляет логическое значение для альтернативного цвета. Таким образом, в вашем адаптере вы можете сделать это в себе onBind
:
override fun onBindViewHolder(viewHolder: ViewHolder, position: Int) {
val data = adapterList[position]
if(data.otherColor) {
viewholder.textView.color = Color.Red
} else {
viewholder.textView.color = Color.Black
}
}
И затем:
// inside your viewModel
private val _singleData = MutableLiveData<Data>()
val singleData: LiveData<Data>
get() = _singleData
fun update(data: Data, isActive: Boolean) {
val result: Boolean = callBackend(data, isActive)
data.otherColor = result
_singleData.value = data
}
// inside your activity
handlerViewModel.singleData.observe(this, Observer { singleData ->
val index = adapter.adapterList.indexOfFirst { singleData.id == it.id }
adapterList[index] = singleData
adapter.notifyItemChanged(index)
}
Или, если вы хотите наблюдать и обновлять весь набор данных:
// inside your viewModel
private val _allData = MutableLiveData<List<Data>>()
val allData: LiveData<List<Data>>
get() = _allData
fun update(data: Data, isActive: Boolean) {
val result: Boolean = callBackend(data, isActive)
val listToUpdate = allData.value
listToUpdate.find { it.id == data.id }.otherColor = result
_allData.value = listToUpdate
}
// inside your activity
handlerViewModel.allData.observe(this, Observer { rvData ->
adapter.clear()
adapter.addAll(rvData)
adapter.notifydatasetChanged()
}