我试图实现一种布局,其顶部和下方都有旋转木马,它是图像的网格布局。该活动有一个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。
非常感谢任何帮助或建议。
答案 0 :(得分:0)
当我在ViewHolder上为嵌套的RecyclerView删除“静态”限定符时,此问题已得到解决。出于某种原因,在查找lastVisiblItem时,重用视图来绑定列表项会导致错误的结果。如果有人可以解释为什么那么我会非常好。我无法理解。