【问题标题】:How to get Top Item of recyclerview on scroll如何在滚动时获取 recyclerview 的 Top Item
【发布时间】:2016-03-20 12:22:27
【问题描述】:

感谢您抽出宝贵的时间阅读此主题。 我正在开发一个 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);
            }


        }
    });

【问题讨论】:

  • 您的代码看起来正确。你测试过吗?顺便说一句,为什么不测试 'dy == 0' 呢?这会给你同样的结果。
  • 我打印了日志,但我什至看不到打印的日志:(
  • 此代码适用于简单的 recyclerview。但在嵌套的 recylerview 中它不起作用。

标签: android android-recyclerview


【解决方案1】:

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

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

    // reach first fully visible item.

}

来自op问题代码sn-p..

  1. 当心linearLayoutManager1的NullPointerException,检查null
  2. 注意linearLayoutManager1的ClassCastException,检查instanceof

【讨论】:

    猜你喜欢
    • 2015-11-17
    • 1970-01-01
    • 2019-05-25
    • 1970-01-01
    • 1970-01-01
    • 2016-07-17
    • 1970-01-01
    • 2019-05-05
    • 2018-03-23
    相关资源
    最近更新 更多