Ответ 1
попробуйте работать с onScrollStateChanged
он решит вашу проблему.
У меня есть метод, который проверяет, является ли последний элемент в RecyclerView полностью видимым пользователем, пока у меня есть этот код Проблема в том, как проверить, достигло ли RecyclerView до дна?
PS У меня есть разделители элементов
public void scroll_btn_visibility_controller(){
if(/**last item is visible to user*/){
//This is the Bottom of the RecyclerView
Scroll_Top_Btn.setVisibility(View.VISIBLE);
}
else(/**last item is not visible to user*/){
Scroll_Top_Btn.setVisibility(View.INVISIBLE);
}
}
ОБНОВЛЕНИЕ: Это одна из попыток, которые я пробовал
boolean isLastVisible() {
LinearLayoutManager layoutManager = ((LinearLayoutManager)rv.getLayoutManager());
int pos = layoutManager.findLastCompletelyVisibleItemPosition();
int numItems = disp_adapter.getItemCount();
return (pos >= numItems);
}
public void scroll_btn_visibility_controller(){
if(isLastVisible()){
Scroll_Top.setVisibility(View.VISIBLE);
}
else{
Scroll_Top.setVisibility(View.INVISIBLE);
}
}
Пока что нет успеха, я думаю, что в этих строках что-то не так:
int pos = layoutManager.findLastCompletelyVisibleItemPosition();
int numItems = disp_adapter.getItemCount();
попробуйте работать с onScrollStateChanged
он решит вашу проблему.
Вы можете создать обратный вызов в своем адаптере, который будет отправлять сообщение вашей активности/фрагменту каждый раз, когда отображается последний элемент.
Например, вы можете реализовать эту идею в методе onBindViewHolder
@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
}
ОБНОВИТЬ
Ну, я знаю, что это было какое-то время, но сегодня я столкнулся с той же проблемой, и я придумал решение, которое прекрасно работает. Итак, я просто оставлю это здесь, если кому-нибудь это понадобится:
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
}
}
});
Предполагая, что вы используете LinearLayoutManager
, этот метод должен сделать трюк:
boolean isLastVisible() {
LinearLayoutManager layoutManager = ((LinearLayoutManager)mRecyclerView.getLayoutManager());
int pos = layoutManager.findLastCompletelyVisibleItemPosition();
int numItems = mRecyclerView.getAdapter().getItemCount();
return (pos >= numItems);
}