0

I'm trying to implement a recyclerview and when the last item is visible, I have to make a new request several times, but I cannot find out how can I find out if the last item is visible. Any suggestions?

  • A valid solution: https://stackoverflow.com/a/62361793/7210237 `LinearLayoutManager` and similar layout managers have `findFirstVisibleItemPosition()` and `findLastVisibleItemPosition()` methods you can from `onScrolled` method of `RecyclerView.OnScrollListener` . – Jenea Vranceanu Jul 09 '20 at 15:50

1 Answers1

0

To find out when the last item is visible you should implement RecylerView.OnScrollListener and every time list is scrolled query position of the last visible item on screen:

Kotlin

recyclerView.addOnScrollListener(object: RecyclerView.OnScrollListener() {
    override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
        super.onScrolled(recyclerView, dx, dy)
        val linearLayoutManager = recyclerView.layoutManager as LinearLayoutManager
        val lastVisiblePosition = linearLayoutManager.findLastVisibleItemPosition()
 
        if (lastVisiblePosition == dataList.size) {
            // perform network request
        }
    }
})

Java

recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
    @Override
    public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
        super.onScrolled(recyclerView, dx, dy);
        LinearLayoutManager linearLayoutManager = (LinearLayoutManager) recyclerView.getLayoutManager();
        int lastVisiblePosition = linearLayoutManager.findLastVisibleItemPosition();
        
        if (lastVisiblePosition == dataList.size()) {
           // perform network request
        }
    }
})

Use findLastCompletelyVisibleItemPosition() instead of findLastVisibleItemPosition() if you need to check when the last item is completely visible.

Jenea Vranceanu
  • 4,530
  • 2
  • 18
  • 34