美文网首页RecyclerviewAndroid知识Android开发
滚,recyclerview,滚到指定位置

滚,recyclerview,滚到指定位置

作者: bogerLiu | 来源:发表于2017-03-14 10:20 被阅读5830次
    • 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()); //滚动到顶部
            }    
        } 
       }
    });```

    相关文章

      网友评论

      • f965a5634362:CoordinatorLayout嵌套recyclerview能实现吗
      • 逗你玩222:不错,横向滚动也可以
      • 青宁呀:很不错啊,完美的解决了我的问题!
      • wuhtt:我记得如果在当前界面的话,是可以通过layout manager 来滚的,可以试试
        bogerLiu:好的

      本文标题:滚,recyclerview,滚到指定位置

      本文链接:https://www.haomeiwen.com/subject/xypcnttx.html