如何检查 RecyclerView 的第一项是否在屏幕上可见

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)


Zun*_*Zun 7

int firstVisiblePosition = layoutManager.findFirstVisibleItemPosition();
if (firstVisiblePosition  == 0) { do your thing )
Run Code Online (Sandbox Code Playgroud)