在嵌套的RecyclerView子项中,onScrollListener没有得到trigerred

时间:2017-06-02 20:07:17

标签: android android-recyclerview onscrolllistener

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

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

我尝试了什么:

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

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

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。

非常感谢任何帮助或建议。

1 个答案:

答案 0 :(得分:0)

当我在ViewHolder上为嵌套的RecyclerView删除“静态”限定符时,此问题已得到解决。出于某种原因,在查找lastVisiblItem时,重用视图来绑定列表项会导致错误的结果。如果有人可以解释为什么那么我会非常好。我无法理解。