Я подписался на наблюдаемое в моем представлении ресайклера для каждого держателя. Идентификатор предметов отправляется в наблюдаемый. Мой наблюдаемый метод возвращает данные из комнаты db.
fun getFavouriteById(id: Int): Observable<Boolean>{
return eventsDao.getFavouriteById(id)
}
И я обновляю базу данных нажатием кнопки
holder.imageHeart.setOnClickListener {
if (!holder.favourite) {
holder.imageHeart.setImageResource(R.drawable.redheart)
viewModel.setFavouriteById(item.elementAt(position).event_id,true)
} else {
holder.imageHeart.setImageResource(R.drawable.heartwhitepng)
viewModel.setFavouriteById(item.elementAt(position).event_id,false)
}
holder.favourite = !holder.favourite
}
И я подписываюсь на наблюдаемое, как это
viewModel.getFavouriteById(item.elementAt(position).event_id)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({favourite->
if (favourite) {
holder.imageHeart.setImageResource(R.drawable.redheart)
holder.favourite = true
} else {
holder.imageHeart.setImageResource(R.drawable.heartwhitepng)
holder.favourite = false
}
},{
}).let { compositeDisposable.add(it) }
Проблема в том, что когда я нажимаю кнопку, вызываются все наблюдаемые для каждого из элементов. Понятно, что это его работа Rx. Но я хочу сделать так, чтобы метод вызывался для определенного идентификатора c элемента в представлении ресайклера. Может ли кто-нибудь предложить мне решение этой проблемы,