RecyclerView 列表、网格滑动到指定位置

本文详细介绍了如何在 RecyclerView(GridLayout)中让某个 item 滑动到最上方,包括 scrollToPosition、smoothScrollToPosition 和 scrollBy 的使用,并针对目标项在屏幕内的不同位置提供了处理思路和代码示例,解释了为何在特定情况下需要监听滑动状态来确保准确显示。
摘要由CSDN通过智能技术生成

RecyclerView (GridLayout) 滑动到指定位置

我的 RecyclerView 才不会这么笨!

RecyclerView 布局有三类,列表(横竖)、网格、瀑布流(
不规则),让某一个 item 显示在最上方(非最后一项),使用 scrollPosition 将某一个位置设置可见第一项,或者计算显示的 item 距离第一项距离,用 scrollBy 移动过去,常用使用下面几个方法实现该功能:

LayoutManager
1. scrollToPosition(int position)
2.smoothScrollToPosition(RecyclerView recyclerView, RecyclerView.State state,
int position)

RecyclerView 滑动实际是调用设置的 LayoutManager 的滑动 toPosition.
1. scrollBy(int x, int y)
2. smoothScrollToPosition(int position)
3. scrollToPosition(int position)
注:RecyclerView 的 scrollTo(int x, int y) 这个方法不具备滑动的功能,具体见源码:

public void scrollTo(int x, int y) {   
    Log.w(TAG, "RecyclerView does not support scrolling to an absolute position. Use scrollToPosition instead");
}

如果要使 RecyclerView 滑动到某一个位置,会有下面几种情况:
1. 目标项在屏幕内
2. 目标项在屏幕上,即显示的位置小于当前显示的第一项位置
3. 目标项在屏幕下,即显示项在大于当前屏幕显示最后一项

处理思路:

  • 条件 1,使用 scrollToPosition / smoothScrollToPosition 均无效,因为目标项已经在屏幕可见范围,所以不会有滑动效果,因此需要计算目标项距离父布局的高度, scrollBy(0,dy)
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值