9 android android-recyclerview
是否可以检查RecyclerView用户屏幕上的第一项或第二项是否可见?
例如当用户向下滚动时:
if (first item not visible to user) {
// do something
}
else if ( first item is visible){
// do something
}
Run Code Online (Sandbox Code Playgroud)
我目前所做的是向我的回收器添加一个侦听器,以便当用户向下滚动时,它会执行某些操作并向上滚动。
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
if (dy > 0) {
mAccountLayout.setVisibility(View.GONE);
mDateLayout.setVisibility(View.GONE);
Log.d("SCROLLINGDOWN","SCROLL");
} else {
mAccountLayout.setVisibility(View.VISIBLE);
mDateLayout.setVisibility(View.VISIBLE);
Log.d("SCROLLINGUP","SCROLL");
}
}
});
Run Code Online (Sandbox Code Playgroud)
但我需要的是检查第一项是否可见。
Hon*_*uan 12
您可以在 中找到一些辅助方法RecyclerView.LayoutManager,例如,如果您使用 a LinearLayoutManager,请检查这些方法:
int findFirstCompletelyVisibleItemPosition() // Returns the adapter position of the first fully visible view.
int findFirstVisibleItemPosition() // Returns the adapter position of the first visible view.
int findLastCompletelyVisibleItemPosition() // Returns the adapter position of the last fully visible view.
int findLastVisibleItemPosition() // Returns the adapter position of the last visible view.
Run Code Online (Sandbox Code Playgroud)
在此处查看完整文档。
在您的代码中:
recyclerView.setAdapter(adapter);
final LinearLayoutManager layoutManager = new LinearLayoutManager(context);
recyclerView.setLayoutManager(layoutManager);
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
if (layoutManager.findFirstVisibleItemPosition() > 0) {
mAccountLayout.setVisibility(View.GONE);
mDateLayout.setVisibility(View.GONE);
Log.d("SCROLLINGDOWN","SCROLL");
} else {
mAccountLayout.setVisibility(View.VISIBLE);
mDateLayout.setVisibility(View.VISIBLE);
Log.d("SCROLLINGUP","SCROLL");
}
}
});
Run Code Online (Sandbox Code Playgroud)
int firstVisiblePosition = layoutManager.findFirstVisibleItemPosition();
if (firstVisiblePosition == 0) { do your thing )
Run Code Online (Sandbox Code Playgroud)