Android 当列表可以'时隐藏浮动操作按钮;不能滚动

Android 当列表可以'时隐藏浮动操作按钮;不能滚动,android,android-recyclerview,Android,Android Recyclerview,我在我的Android项目中使用了一个浮动操作按钮,当列表滚动到底部时,我会隐藏它,当列表滚动到顶部时,我会通过在我的Recyclerview上实现OnScrollListener来显示它 @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { boolean isSignificantDelta = Math.abs(dy) > mScrollThreshold;

我在我的Android项目中使用了一个浮动操作按钮,当列表滚动到底部时,我会隐藏它,当列表滚动到顶部时,我会通过在我的Recyclerview上实现OnScrollListener来显示它

 @Override
    public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
        boolean isSignificantDelta = Math.abs(dy) > mScrollThreshold;
        if (isSignificantDelta) {
            if (dy > 0) {
                onScrollUp();
            } else {
                onScrollDown();
            }
        }
    }
现在,当我的列表不可滚动时,我想隐藏这个fab,因为我的最后一个元素是完全可见的

当我的列表为空,或者包含的项目很少,并且由于其大小而不可滚动时,不会调用Scrolled的方法

您是否有调用此方法的提示,因为这似乎是我想做的事情的解决方案?

检查下面的代码

public abstract class HideShowScrollListener extends RecyclerView.OnScrollListener {

private static final int HIDE_THRESHOLD = 20;
private int scrolledDistance = 0;
private boolean controlsVisible = true;

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

    if (scrolledDistance > HIDE_THRESHOLD && controlsVisible) {
        onHide();
        controlsVisible = false;
        scrolledDistance = 0;
    } else if (scrolledDistance < -HIDE_THRESHOLD && !controlsVisible) {
        onShow();
        controlsVisible = true;
        scrolledDistance = 0;
    }

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

public abstract void onHide();

public abstract void onShow();
}

这似乎不是一个正确的方法,但我没有找到更好的解决方案

getItemCount
方法中,我返回
array.size()+2
,因此recycler视图又创建了两个项目(这对我来说是正确的数量,您可能需要另一个数字)。在
onCreateViewHolder
方法中,我检查应该在什么位置创建视图。如果它超出了我的项目数组的范围,我只需禁用其中的所有小部件(按钮、编辑文本等),并将其可见性设置为不可见(因为我需要它来占用一些空间,所以它不会消失)。 我还有一个callback
onimmove
,当用户通过拖动对项目进行重新排序时会调用它。在里面,我检查新位置是否超出数组的范围。当然,最后两项禁用了拖动


正如我所说,这是一个解决办法,但非常简单。我没有注意到它的任何缺点。希望这有帮助

也许你可以利用?@azizbekian和一个CoordinatorLayout,当他重叠我列表的最后一项时,我如何隐藏我的FAB,这是不可滚动的(列表中没有足够的元素)。我已经在使用这个实现,但是当我的列表只包含很少的项时,onScrolled没有被调用。请回顾我的问题。我想隐藏FAB,但onScrolled没有被调用,所以我不知道该怎么做。只需在设置浮动按钮的可见性消失时做一件事,当列表滚动时,然后将其设置为可见/消失。问题是,当我的列表中包含的元素很少而无法滚动时,FAB位于最后一个元素之上,而onScrolled不被称为
recyclerView.addOnScrollListener(new HideShowScrollListener() {
        @Override
        public void onHide() {
            floatingAdd.animate().setInterpolator(new AccelerateDecelerateInterpolator()).scaleX(0).scaleY(0);
        }

        @Override
        public void onShow() {
            floatingAdd.animate().setInterpolator(new AccelerateDecelerateInterpolator()).scaleX(1).scaleY(1);
        }
    });