Android - Detect when the last item in a RecyclerView is visible

后端 未结 4 734
挽巷
挽巷 2020-12-03 04:46

I have a method that will check if the last element in a RecyclerView is completely visible by the user, so far I have this code The problem is how to check if the Recycler

相关标签:
4条回答
  • 2020-12-03 05:42

    Assuming you're using LinearLayoutManager, this method should do the trick:

    boolean isLastVisible() {
      LinearLayoutManager layoutManager = ((LinearLayoutManager)mRecyclerView.getLayoutManager());
      int pos = layoutManager.findLastCompletelyVisibleItemPosition();
      int numItems = mRecyclerView.getAdapter().getItemCount();
      return (pos >= numItems);
    }
    
    0 讨论(0)
  • 2020-12-03 05:45

    You should use your code with following change:

    boolean isLastVisible() {
        LinearLayoutManager layoutManager =((LinearLayoutManager) rv.getLayoutManager());
        int pos = layoutManager.findLastCompletelyVisibleItemPosition();
        int numItems =  disp_adapter.getItemCount();
        return (pos >= numItems - 1);
    }
    

    Be careful, findLastCompletelyVisibleItemPosition() returns the position which start at 0. So, you should minus 1 after numItems.

    0 讨论(0)
  • 2020-12-03 05:47

    try working with onScrollStateChanged it will solve your issue

    0 讨论(0)
  • 2020-12-03 05:49

    You can create a callback in your adapter which will send a message to your activity/fragment every time when the last item is visible.

    For example, you can implement this idea in onBindViewHolder method

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int position) {
        if(position==(getItemCount()-1)){
            // here goes some code
            //  callback.sendMessage(Message);
         }
        //do the rest of your stuff 
    }
    

    UPDATE

    Well, I know it's been a while but today I ran into the same problem, and I came up with a solution that works perfectly. So, I'll just leave it here if anybody ever needs it:

    recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
        @Override
        public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
            LinearLayoutManager layoutManager=LinearLayoutManager.class.cast(recyclerView.getLayoutManager());
            int totalItemCount = layoutManager.getItemCount();
            int lastVisible = layoutManager.findLastVisibleItemPosition();
    
            boolean endHasBeenReached = lastVisible + 5 >= totalItemCount;
            if (totalItemCount > 0 && endHasBeenReached) {
                //you have reached to the bottom of your recycler view
            }
        }
    });
    
    0 讨论(0)
提交回复
热议问题