RecyclerView滚动监听器

4

我需要在滚动RecyclerView时隐藏和显示浮动操作按钮,我已经成功地在SDK 23下实现了这个功能,代码如下(newReminder是我需要隐藏和显示的按钮):

recyclerView.setOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
    super.onScrollStateChanged(recyclerView, newState);
}

@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
    super.onScrolled(recyclerView, dx, dy);

    if (scrolledDistance > HIDE_THRESHOLD && !newReminder.isMenuButtonHidden()) {
        newReminder.hideMenuButton(true);
        scrolledDistance = 0;
    } else if (scrolledDistance < -HIDE_THRESHOLD && newReminder.isMenuButtonHidden()) {
        newReminder.showMenuButton(true);
        scrolledDistance = 0;
    }

    if((!newReminder.isMenuButtonHidden() && dy>0) || (newReminder.isMenuButtonHidden() && dy<0)) {
        scrolledDistance += dy;
    }
}

然而,在SDK 23中,当我使用onScrollChangeListener时,我对参数感到困惑了,下面的代码不再起作用:

});

if(Build.VERSION.SDK_INT > 22){
recyclerView.setOnScrollChangeListener(new View.OnScrollChangeListener() {
    @Override
    public void onScrollChange(View v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) 
        if (scrolledDistance > HIDE_THRESHOLD && !newReminder.isMenuButtonHidden()) {
            newReminder.hideMenuButton(true);
        } else if (scrolledDistance < -HIDE_THRESHOLD && newReminder.isMenuButtonHidden()) {
            newReminder.showMenuButton(true);
        }
        if((!newReminder.isMenuButtonHidden() && scrollY > 0)
                || (newReminder.isMenuButtonHidden() && scrollY < 0)) {
            scrolledDistance = oldScrollY - scrollY;
        }
    }
});

我想我误解了scrollY和oldScrollY的含义,有人可以帮助我吗?谢谢!!!

1个回答

13

setOnScrollChangeListener(OnScrollChangeListener l)是不正确的替换已弃用方法setOnScrollListener(OnScrollListener listener)

请改用addOnScrollListener(OnScrollListener)removeOnScrollListener(OnScrollListener)这两个方法。这些方法接受同样的OnScrollListener参数,因此您不必担心逻辑变化。 唯一与以前实现不同的是,现在您可以向RecyclerView添加多个监听器。

这是文档链接


你知道为什么addOnScrollListener在Android Studio中是红色的,无法被接受吗? - János

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接