过去,我已经问过如何为RecyclerView(here)创建一个快速滚动条,并找到了添加它的方法,我甚至发布了它,包括一个Github项目({ {3}})。
从特定的支持库版本开始,事情变得越来越糟糕。我做的图书馆工作正常:
compile 'com.android.support:recyclerview-v7:21.0.3'
compile 'com.android.support:appcompat-v7:21.0.3'
但不是这个:
compile 'com.android.support:recyclerview-v7:22.2.0'
compile 'com.android.support:appcompat-v7:22.2.0'
以下是过去工作方式的示例:
发生的错误是,当拖动快速滚动条时,它(您拖动的内容)会不时跳到其他地方(报告here)。
我尝试找到原因,并找出RecyclerView中可能导致此问题的更改。
我也尝试过报道(here),但谷歌告诉我在这里问一下。
可悲的是,我找不到原因。
如何解决此问题,并使代码再次正常工作?
答案 0 :(得分:1)
多么巧合,我刚刚使用你的FastScroller并遇到了同样的问题,我也使用了22.2.0。
我要测试的列表大约有150个项目,当我慢慢滚动时,我看到手柄和气泡中有小跳跃。
一些调试,我发现当我拖动句柄时,从onTouch和onScrolled调用方法setBubbleAndHandlePosition()
。
问题在于onScrolled根据顶行计算句柄的“完美”位置。这导致与手柄握持的位置不同。
我的解决方案非常简单,如果句柄处于“拖动”模式,我通过检查isSelected()检查onScrolled()并阻止onScrolled()的进一步计算。
@Override
public void onScrolled(RecyclerView rv, int dx, int dy)
{
// only react on scroll events when not done by moving the handle by touch
// prevents nervous jumping of the handle
if (handle.isSelected())
{
return;
}
// rest code of onScrolled is unchanged
}
我猜原因是/是onScrolled未被调用到22.x以下但是现在......