【发布时间】:2015-05-12 10:46:30
【问题描述】:
我为 RecyclerView 实现了一个 OnScrollListener,如下所示:
new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
scrollY += dy;
}
};
这应该将所有滚动更改相加,以便 scrollY 保持 RecyclerView 的总垂直滚动。
但是当我向下滚动到列表末尾并向上滚动时,滚动值不等于 0,而是正值(在我的测试示例中,它以 300 左右结束)。
我的实现的哪一部分是错误的?
【问题讨论】:
-
overScroll模式是否开启? -
overScroll我没改,所以是默认值(OVER_SCROLL_ALWAYS)。我怀疑它可能与 ViewPager 中的片段重新实例化有关,因为 Recycler 位于 ViewPager 中的片段内,我现在将仔细检查我的片段状态恢复。 OverScroll 和 OnScrollListener 是否存在已知问题?
-
我排除了这个问题,因为我的片段永远不会被保存。我已经怀疑了,因为我使用的是 FragmentPagerAdapter 而不是 FragmentStatePagerAdapter,但我只是仔细检查了 Logcat,它与片段 reinstanciation 无关。
-
我仍然遇到您在问题中首先描述的问题。看起来依赖 onScrolled 回调并不能产生准确的总滚动...如果您在不抬起手指的情况下来回拖动列表,一切都会很好,但是一旦您一甩,该值就会与它不同步真的应该。还没解决。
-
@brAzzi64 是的,我也这么认为。但是,如果您使用的是 LinearLayoutManager,则有一种更准确的方法来进行这些计算。您可以使用它来获取当前的屏幕视图,然后在其中一个上调用 getTop(),您至少可以获得非常精确的视图位置
标签: android android-recyclerview onscrolllistener