gpt4 book ai didi

android - 使用 scrollToPosition 时不调用 RecyclerView onScrolled

转载 作者:太空宇宙 更新时间:2023-11-03 13:10:47 27 4
gpt4 key购买 nike

我有这样的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 and lastVisibleItem=5 => onScrolled 没有被调用,firstVisibleItem=2 and lastVisibleItem=6 => onScrolled 会被调用)

在使用 scrollToPosition 时,是否有任何技巧或变通方法总是接收到 onScrolled

enter image description here

如有任何帮助或建议,我们将不胜感激。

最佳答案

我发现
如果 RecyclerView 被滚动(通过使用 scrollToPosition)而 firstVisibleItemlastVisibleItem 没有改变 THEN RecyclerView。 OnScrollListener 未被调用但 View.OnLayoutChangeListener被称为。

因此,现在我同时使用 OnScrollListenerOnLayoutChangeListener 来监听 RecyclerView 滚动。

我还在寻找更好的解决方案

关于android - 使用 scrollToPosition 时不调用 RecyclerView onScrolled,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45686356/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com