Android 如何获取卷轴上的recyclerview顶部项目

Android 如何获取卷轴上的recyclerview顶部项目,android,android-recyclerview,Android,Android Recyclerview,感谢您抽出宝贵的时间阅读本帖。 我正在开发一个android应用程序,其中在recyclerview的项目中有recyclerview 当滚动recyclerview(parent recyclerview)到达父项的第一个项目的上部位置时(即,如果第一个项目的上部位置完全可见),我想执行一些任务 到目前为止,我已经尝试过了,但它并没有达到我所需要的预期效果 recyclerView.addOnScrollListener(new RecyclerView.OnScrollListene

感谢您抽出宝贵的时间阅读本帖。 我正在开发一个android应用程序,其中在recyclerview的项目中有recyclerview

当滚动recyclerview(parent recyclerview)到达父项的第一个项目的上部位置时(即,如果第一个项目的上部位置完全可见),我想执行一些任务

到目前为止,我已经尝试过了,但它并没有达到我所需要的预期效果

    recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
        @Override
        public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
            super.onScrollStateChanged(recyclerView, newState);
        }

        @Override
        public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
            super.onScrolled(recyclerView, dx, dy);
            LinearLayoutManager linearLayoutManager1 = (LinearLayoutManager) recyclerView.getLayoutManager();
            int displayedPosition = linearLayoutManager1.findFirstCompletelyVisibleItemPosition();

            if(displayedPosition==0){
            //Is this the place where top position of first item is reached ?

                ((ControllableAppBarLayout) getActivity().findViewById(R.id.app_bar_layout)).expandToolbar(true);
            }


        }
    });

通过使用这两种方法的组合,您可以归档所需的内容

 if (linearLayoutManager1.findFirstVisibleItemPosition() == 0
     && linearLayoutManager1.findFirstCompletelyVisibleItemPosition() == 0) {

    // reach first fully visible item.

}
从op问题代码段

  • 当心linearLayoutManager1的NullPointerException,请选中null
  • 注意linearLayoutManager1的ClassCastException,检查instanceof

  • 您的代码看起来是正确的。你测试过了吗?顺便问一下,为什么不测试一下‘dy==0’?这将给你同样的结果。我打印了日志,但即使是我也看不到打印的日志:(此代码对于简单的recyclerview工作正常。但是在嵌套的recylerview中它不工作。