Android-определить, когда последний элемент в RecyclerView отображается
у меня есть метод, который проверит, является ли последний элемент в 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();
3 ответов
вы можете создать обратный вызов в вашем адаптере, который будет отправлять сообщение вашей активности / фрагменту каждый раз, когда последний элемент виден.
например, вы можете реализовать эту идею в методе 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);
}