Многократная стрельба из наблюдаемого под ресайкером вида - PullRequest
0 голосов
/ 11 июля 2020

Я подписался на наблюдаемое в моем представлении ресайклера для каждого держателя. Идентификатор предметов отправляется в наблюдаемый. Мой наблюдаемый метод возвращает данные из комнаты 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 элемента в представлении ресайклера. Может ли кто-нибудь предложить мне решение этой проблемы,

...