滚,recyclerview,滚到指定位置

  • RecyclerView指定item滚动顶部

对于recyclerview滚动大家知道有scrollTo,scrollBy这种类似的方法。
但是大家有没有发现,当让recycleview滚动到某一位置会出现如下两种情况,
1:对于recyclerView滚动到某个position位置,当这个position位置不在当前界面内,recyclerView会滚动到当前position位置。
2:如果这个position已经在这个界面内显示,recyclerView是不会进行滚动到当前位置。对于这种问题,就需要用recyclerView的scrollBy();函数进行距离滚动,通过recyclerView.getChildAt(position).getTop()。获取到当前界面内该View距离顶部的距离,值得注意的是,recyclerView.getChildAt()里面的参数,是当前界面中view的位置,并不是recyclerView整个viewList中的数据的位置,所以求得这个view位于界面中的位置,需要通过用整个数据项的位置减去界面中第一个view的位置,就是这个view位于当前界面的位置。
示例代码:

final LinearLayoutManager manager = (LinearLayoutManager) recyclerView.getLayoutManager();
int fir = manager.findFirstVisibleItemPosition();
int end = manager.findLastVisibleItemPosition();
final int p = Integer.parseInt(string);
if (p <= fir) {
        recyclerView.scrollToPosition(p);
} else if (p <= end) {   
      int top = recyclerView.getChildAt(p - fir).getTop(); 
      recyclerView.scrollBy(0, top);
} else {    
      recyclerView.scrollToPosition(p);    //先让当前view滚动到列表内
      move = true;
}
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener()
 {    
      @Override  
        public void onScrolled(RecyclerView recyclerView, int dx, int dy) { 
          super.onScrolled(recyclerView, dx, dy);  
                if (move) {          
              move = false;     
           int n = p - manager.findFirstVisibleItemPosition(); 
  if (n >= 0 && n < recyclerView.getChildCount()) {    
            recyclerView.scrollBy(0, recyclerView.getChildAt(n).getTop()); //滚动到顶部
        }    
    } 
   }
});```
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容