【问题标题】:In nested RecyclerView child's onScrollListener not getting trigerred在嵌套的 RecyclerView 孩子的 onScrollListener 没有被触发
【发布时间】:2017-06-02 20:07:17
【问题描述】:

我试图实现一种布局,其中顶部有旋转木马,下面是图像的网格布局。该活动有一个 RecyclerView 并且该 RecyclerView(MainRV) 本身的项目是另一个 RecyclerView(ChildRV)。我让 MainRV 的第一个孩子使用带水平滚动的 LinearlayoutManager。第二个孩子正在使用 GridLayoutManager。 ChildRV 呈现实际项目。

问题是,我想为 MainRV 的第二个孩子(网格视图)实现延迟加载。但是,当我尝试将 onScrollListener 添加到孩子时,它不会被触发。

我尝试过的:

我尝试在 MainRV 和 ChildRV 上设置 setNestedScrollingEnabled。仍然没有触发 onScrollListener。

我在 MainRV 上实现了 onScrollListener 并尝试在滚动状态变为 IDLE 后获取第二个子项。但是当我在 gridLayoutManager 上调用 findLastVisibleItemPosition() 时,即使我在网格视图的顶部,它也会给出最后一项的位置。下面是onScrollListener的sn-p

mRecyclerView.setOnScrollListener(new RecyclerView.OnScrollListener() {
    @Override
    public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
        super.onScrollStateChanged(recyclerView, newState);
        if(newState == RecyclerView.SCROLL_STATE_IDLE) {

            RecyclerView recyclerView1 = (RecyclerView) recyclerView.getChildAt(1);
            GridLayoutManager gridLayoutManager = (GridLayoutManager) recyclerView1.getLayoutManager();

            Log.e("Scrolled activity pos", "" + gridLayoutManager.findLastVisibleItemPosition());
        }
    }

    @Override
    public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
        super.onScrolled(recyclerView, dx, dy);
    }
});

上述代码的输出给出了最后一项的位置,在我的例子中是 49。

任何帮助或建议将不胜感激。

【问题讨论】:

  • 我认为原因是父recyclerview中断了从传递到子recyclerview的触摸事件。我也有同样的问题,还没解决。

标签: android android-recyclerview onscrolllistener


【解决方案1】:

当我删除嵌套 RecyclerView 的 ViewHolder 上的“静态”限定符时,这里的问题得到了解决。出于某种原因,在查找 lastVisiblItem 时,重用视图来绑定列表项会给出错误的结果。如果有人能解释为什么,那么我会非常感激。我想不通。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-06
    • 1970-01-01
    • 2012-12-13
    相关资源
    最近更新 更多