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

14 篇文章 1 订阅

我们经常有这样的需求: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只需要几个操作符,轻轻松松。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
很好,我可以回答你的问题。 首先,要实现Android RecyclerView的两行多列布局,你需要设置LayoutManager。在这个LayoutManager中,你需要使用GridLayoutManager,将显示的项目数设置为2并充满整个可用区域。以下是设置LayoutManager的代码示例: RecyclerView recyclerView = findViewById(R.id.recycler_view); GridLayoutManager gridLayoutManager = new GridLayoutManager(this, 2); recyclerView.setLayoutManager(gridLayoutManager); 接下来,你需要为RecyclerView创建一个Adapter。为了实现两行多列布局,你可以使用cardView作为每个项目的容器。以下是创建Adapter的代码示例: public class MyAdapter extends RecyclerView.Adapter<MyViewHolder> { private List<MyData> myDataList; public MyAdapter(List<MyData> myDataList) { this.myDataList = myDataList; } @Override public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.my_card_view, parent, false); return new MyViewHolder(view); } @Override public void onBindViewHolder(MyViewHolder holder, int position) { MyData data = myDataList.get(position); holder.bindData(data); } @Override public int getItemCount() { return myDataList.size(); } } 其中,R.layout.my_card_view是每个项目的布局文件。你需要创建该文件并定义cardView,并将其中的内容绑定到ViewHolder对象上。 要添加一个底部提示,你可以使用RecyclerView的addOnScrollListener() 方法。在scroll事件触发时,你可以检查RecyclerView是否滑动到了底部,如果是,你可以在底部添加一个提示。以下是添加底部提示的代码示例: recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { super.onScrolled(recyclerView, dx, dy); int visibleItemCount = gridLayoutManager.getChildCount(); int totalItemCount = gridLayoutManager.getItemCount(); int firstVisibleItemPos = gridLayoutManager.findFirstVisibleItemPosition(); if ((visibleItemCount + firstVisibleItemPos) >= totalItemCount && firstVisibleItemPos >= 0) { // 已滑动到底部 // 添加提示到底部 } } }); 希望这可以帮助你实现你的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fundroid

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值