How to use RecyclerView.scrollToPosition() to move the position to the top of current view?

前端 未结 5 708
长情又很酷
长情又很酷 2020-12-01 03:03

The RecyclerView.scrollToPosition() is extremely strange. for example, supposed a RecyclerView named \"rv\".

  1. if now i

相关标签:
5条回答
  • 2020-12-01 03:13

    try recycler_view.smoothScrollBy(0, 100); here 0 represents x-coordinate and 100 represents y-coordinate I used this in vertical recyclerView where I wanted to scroll to next position in the vertical list and for coming to the previous position I simply replaced 100 with -100

    0 讨论(0)
  • 2020-12-01 03:14

    Below link might solve your problem:

    https://stackoverflow.com/a/43505830/4849554

    Just create a SmoothScroller with the preference SNAP_TO_START:

    RecyclerView.SmoothScroller smoothScroller = new 
    LinearSmoothScroller(context) {
       @Override protected int getVerticalSnapPreference() {
           return LinearSmoothScroller.SNAP_TO_START;
       }
    };
    

    Now you set the position where you want to scroll to:

    smoothScroller.setTargetPosition(position);
    

    And pass that SmoothScroller to the LayoutManager:

    layoutManager.startSmoothScroll(smoothScroller);
    
    0 讨论(0)
  • 2020-12-01 03:16

    This is the Kotlin code snippet but you can just get the point for scrolling to the item by position properly. The point is to declare the member variable for the layout manager and use its method to scroll.

    lateinit var layoutManager: LinearLayoutManager
    
    fun setupView() {
        ...
    
        layoutManager = LinearLayoutManager(applicationContext)
        mainRecyclerView.layoutManager = layoutManager
    
        ...
    }
    
    fun moveToPosition(position: Int) {
        layoutManager.scrollToPositionWithOffset(position, 0)
    }
    
    0 讨论(0)
  • 2020-12-01 03:17

    If I understand the question, you want to scroll to a specific position but that position is the adapter's position and not the RecyclerView's item position.

    You can only achieve this through the LayoutManager.

    Do something like:

    rv.getLayoutManager().scrollToPosition(youPositionInTheAdapter).
    
    0 讨论(0)
  • 2020-12-01 03:22

    If you want to scroll to a specific position and that position is the adapter's position, then you can use StaggeredGridLayoutManager scrollToPosition

       StaggeredGridLayoutManager staggeredGridLayoutManager = new StaggeredGridLayoutManager(1, StaggeredGridLayoutManager.VERTICAL);
       staggeredGridLayoutManager.scrollToPosition(10);
       recyclerView.setLayoutManager(staggeredGridLayoutManager);
    
    0 讨论(0)
提交回复
热议问题