【Android】十行代码轻松搞定RecyclerView底部loadMore逻辑

我们经常有这样的需求:RecyclerView滑动到末尾时自动触发loadMore。传统的做法比较复杂,借助RxBinding可以非常简单地实现

准备


  • rxjava2
  • rxkotlin
  • rxbinding-recyclerview-v7
  • rxbinding-recyclerview-v7-kotlin

滑动监听


val layoutManager = LinearLayoutManager(...)

recyclerView
        .scrollEvents()
        .filter {
    
     layoutManager.itemCount - 1 <= layoutManager.findLastVisibleItemPosition() }
        .subscribe {
    
     loadMore() }

如上,Scroll的监听变得非常简单。

数据加载

val loadCompletedStream = PublishSubject.create<Unit>()
recyclerView
        .scrollEvents()
        .skipUntil(loadCompletedStream)
        .filter {
    
     layoutManager.itemCount - 1 <= layoutManager.findLastVisibleItemPosition() }
        .take(1)
        .repeat()
        .subscribe {
    
     loadMore() }
  • loadCompletedStream:数据加载完成的通知
  • skipUntil() : 收到loadCompletedStream之前不在下发scroll事件
  • take(1):避免多次触发loadMore
  • repeat(): 接收到onComplete时触发重订阅,监听下次loadMore

以上同样的逻辑,通常需要大量代码,使用RxJava只需要几个操作符,轻轻松松。

猜你喜欢

转载自blog.csdn.net/vitaviva/article/details/108903883