Как объяснили Stack Diego и PPartisan в комментариях, вы должны создать наблюдаемое за пределами слушателя и подписаться на него один раз.Поскольку каждая наблюдаемая испускает только один элемент, debounce не будет иметь никакого влияния.
Ваш код, вероятно, будет выглядеть примерно так:
Объявите вашу тему как переменную-член.
val subject: PublishSubject<Int> = PublishSubject.create()
Подпишитесь на тему вне слушателя (вы можете сделать это в onResume или onStart, если вы планируете избавиться от наблюдаемого, когда действие приостановлено)
subject
.debounce(1500, TimeUnit.MILLISECONDS)
.observeOn(AndroidSchedulers.mainThread())
.subscribe { retrieveUserDetail(userList[itemPosition]) }
А затем внутри слушателя прокруткисоздать новый элемент при вызове onScrollStateChanged ()
v.pager.addOnScrollListener(object : RecyclerView.OnScrollListener() {
override fun onScrollStateChanged(recyclerView: RecyclerView?, newState: Int) {
super.onScrollStateChanged(recyclerView, newState)
if (newState == RecyclerView.SCROLL_STATE_IDLE) {
val itemPosition : Int = layoutManager.findFirstCompletelyVisibleItemPosition()
subject.onNext(itemPosition)
}
}
})