【问题标题】:RecyclerView onScrollChangeListenerRecyclerView onScrollChangeListener
【发布时间】:2015-10-21 00:39:51
【问题描述】:

我需要在向上和向下滚动 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 的含义,有人可以帮助我吗?谢谢!!!

【问题讨论】:

    标签: android listview scroll android-recyclerview android-6.0-marshmallow


    【解决方案1】:

    setOnScrollChangeListener(OnScrollChangeListener l) 是已弃用方法setOnScrollListener(OnScrollListener listener) 的错误替换。

    请改用addOnScrollListener(OnScrollListener)removeOnScrollListener(OnScrollListener)。这些方法采用相同的OnScrollListener 作为参数,因此您不必担心逻辑的变化。 与之前实现的唯一区别是现在您可以向 RecyclerView 添加多个侦听器。

    这是documentation的链接

    【讨论】:

    • 你知道为什么addOnScrollListener是红色的,不被Android Studio接受吗?
    猜你喜欢
    • 1970-01-01
    • 2021-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-31
    • 2019-03-30
    • 1970-01-01
    相关资源
    最近更新 更多