Last active
July 14, 2023 09:09
-
-
Save samuel22gj/863ddbfb588f907714bf1c6bb9d75b7f to your computer and use it in GitHub Desktop.
A callback listener to notify when item visibility change.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public abstract class OnItemVisibleChangeListener extends RecyclerView.OnScrollListener { | |
private static final String TAG = OnItemVisibleChangeListener.class.getSimpleName(); | |
private int mFirstVisibleItemPosition = RecyclerView.NO_POSITION; | |
private int mFirstCompletelyVisibleItemPosition = RecyclerView.NO_POSITION; | |
private int mLastVisibleItemPosition = RecyclerView.NO_POSITION; | |
private int mLastCompletelyVisibleItemPosition = RecyclerView.NO_POSITION; | |
@Override | |
public void onScrolled(RecyclerView recyclerView, int dx, int dy) { | |
if (recyclerView != null && recyclerView.getLayoutManager() instanceof LinearLayoutManager) { | |
LinearLayoutManager layoutManager = (LinearLayoutManager) recyclerView.getLayoutManager(); | |
int firstVisibleItemPosition = layoutManager.findFirstVisibleItemPosition(); | |
int firstCompletelyVisibleItemPosition = layoutManager.findFirstCompletelyVisibleItemPosition(); | |
int lastVisibleItemPosition = layoutManager.findLastVisibleItemPosition(); | |
int lastCompletelyVisibleItemPosition = layoutManager.findLastCompletelyVisibleItemPosition(); | |
if (mFirstVisibleItemPosition != firstVisibleItemPosition) { | |
mFirstVisibleItemPosition = firstVisibleItemPosition; | |
onFirstVisibleItemChange(recyclerView, mFirstVisibleItemPosition); | |
} | |
if (mFirstCompletelyVisibleItemPosition != firstCompletelyVisibleItemPosition) { | |
mFirstCompletelyVisibleItemPosition = firstCompletelyVisibleItemPosition; | |
onFirstCompletelyVisibleItemChange(recyclerView, mFirstCompletelyVisibleItemPosition); | |
} | |
if (mLastVisibleItemPosition != lastVisibleItemPosition) { | |
mLastVisibleItemPosition = lastVisibleItemPosition; | |
onLastVisibleItemChange(recyclerView, mLastVisibleItemPosition); | |
} | |
if (mLastCompletelyVisibleItemPosition != lastCompletelyVisibleItemPosition) { | |
mLastCompletelyVisibleItemPosition = lastCompletelyVisibleItemPosition; | |
onLastCompletelyVisibleItemChange(recyclerView, mLastCompletelyVisibleItemPosition); | |
} | |
} | |
} | |
public void onFirstVisibleItemChange(RecyclerView recyclerView, int position) {} | |
public void onFirstCompletelyVisibleItemChange(RecyclerView recyclerView, int position) {} | |
public void onLastVisibleItemChange(RecyclerView recyclerView, int position) {} | |
public void onLastCompletelyVisibleItemChange(RecyclerView recyclerView, int position) {} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment