我的问题是,我们可以从RecyclerView
方法调用onScrolled()
的{{1}}方法。原因是我想检查两个条件。如果onScrollStateChanged()
为真,则检查用户是否向下滚动。还有其他方法来检查它们吗?
SCROLL_STATE_SETTLING
答案 0 :(得分:0)
答案 1 :(得分:0)
这是您想要的吗?
通过onScrolled
方法,您可以通过检查dy
是否小于0来知道该用户已向下滚动,来设置布尔标志'isScrolledDown'。然后,只要滚动状态为SCROLL_STATE_SETTLING
并且isScrolledDown
为真,就执行所需的操作。
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
private boolean isScrolledDown = false;
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
if (newState == RecyclerView.SCROLL_STATE_SETTLING && isScrolledDown) {
// Do something...
}
}
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
isScrolledDown = dy < 0;
}
});
答案 2 :(得分:0)
你可以先在你的监听器之外声明这两个变量
//chose appropriate initial values
var updatedRange = Range(...)
var lastVisibilityRange = Range(...)
然后在侦听器回调中,您将有如下内容:
override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
super.onScrolled(recyclerView, dx, dy)
val first = manager.findFirstVisibleItemPosition()
val last = manager.findLastVisibleItemPosition()
lastVisibilityRange = updatedRange
updatedRange = Range(first , last)
//or you can even call this section in onScrollStateChanged
if (updatedRange.lower <= lastVisibilityRange.lower) {
//has scrolled up
} else {
//has scrolled down
}
}
该代码尚未经过测试,您可以通过在其中抛出 LiveData
使其更具反应性,如果这不是您要找的内容,请随时告诉我,希望这会有所帮助或为您指明正确的方向,祝大家有个美好的一天。