我有RecyclerView.OnScrollListener
喜欢这个
findViewById(R.id.button_scroll_to_position).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mLinearLayoutManager.scrollToPositionWithOffset(2,0);
}
});
mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
Log.i("TAG", "scroll " + dy);
}
});
ArrayList<String> list = new ArrayList<>();
for (int i = 0; i < 7; i++) {
list.add("" + i);
}
mRecyclerView.setAdapter(new SimpleRVAdapter(list));
mLinearLayoutManager.scrollToPositionWithOffset(2,0);
但在某些情况下,onScrolled
来电活动RecyclerView
已滚动(使用scrollToPositionWithOffset
)。
我知道原因是当我们使用scrollToPositionWithOffset
(或scrollToPosition
)onScrolled
时,只有在firstVisibleItem
和lastVisibleItem
更改时才会调用。您可以在演示中看到(如果firstVisibleItem = 2且lastVisibleItem = 5 =&gt; onScrolled未调用,则firstVisibleItem = 2且lastVisibleItem = 6 =&gt; onScrolled将被调用)
使用onScrolled
时是否有任何技巧或变通方法可以随时收到scrollToPosition
?
非常感谢任何帮助或建议。
答案 0 :(得分:5)
我发现了
如果滚动firstVisibleItem
(使用scrollToPosition),而lastVisibleItem
和RecyclerView.OnScrollListener
不会更改那么 OnScrollListener
未调用但Click here for more details调用< / p>
因此,现在我同时使用OnLayoutChangeListener
和RecyclerView
进行收听{{1}}滚动。
我仍在寻找更好的解决方案
答案 1 :(得分:0)
我知道我正在破坏线程,但以防万一有人像我一样遇到它...
如果您不关心动画的使用:
recyclerView.smoothScrollToPosition(position);
它将触发
OnScrollListener.onScrolled(RecyclerView recyclerView, int dx, int dy)
答案 2 :(得分:-1)
当你打电话给scrollToPosition()
onScroll时,从未打电话。
来自文档
滚动到某个位置的便捷方法。 RecyclerView有 不实现滚动逻辑,而是转发呼叫 scrollToPosition(INT)
所以scrollToPosition(int)
没有实现滚动逻辑。
有关详细信息,请查看此链接。https://developer.android.com/reference/android/support/v7/widget/RecyclerView.html#scrollToPosition(int)