java - 在 RecyclerView 中的指定元素上显示 float 操作按钮

标签 java android android-recyclerview

我试图仅在滚动到 recyclerView 的特定元素时才显示 fab。 这是我的布局,我为了缩短目的考虑了所有的东西。 所以我希望它在 2、3、3... 项上显示 fab,而不在我的 RecyclerView 的零项和第一项上显示它。

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

    <android.support.design.widget.AppBarLayout
        android:id="@+id/appBarLayout">

        <android.support.v7.widget.Toolbar
        android:id="@+id/details_toolbar"/>

        <include layout="@layout/divider" />

    </android.support.design.widget.AppBarLayout>

    <android.support.v7.widget.RecyclerView
        android:id="@+id/topic_content_recycler"/>

    <android.support.design.widget.FloatingActionButton
        android:id="@+id/fab"/>
</android.support.design.widget.CoordinatorLayout>

我发现的是在滚动时隐藏fab,看起来像这样:

recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener(){
        @Override
        public void onScrolled(RecyclerView recyclerView, int dx, int dy){
            if (dy > 0)
                fabAddNew.hide();
            else if (dy < 0)
                fabAddNew.show();
        }
    });

我想要写得很好的解决方案。 (我假设有一个,由谷歌提供,但我不能资助它) 谢谢。

最佳答案

添加 RecyclerView.OnScrollListener 并使用 onScrollStateChanged(RecyclerView recyclerView, int newState) 回调给你新状态,你应该使用 SCROLL_STATE_IDLE 来获取它position. 这意味着位置改变了并且滚动停止了,现在你可以借助这个来检查哪个项目是可见的

recyclerView.getLayoutManager().findFirstVisibleItemPosition();

现在你可以使用下面的代码并相应地改变它

   recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {

    @Override
    public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
        super.onScrolled(recyclerView, dx, dy);
        if (dy > 0) {
            // Scrolling up
        } else {
            // Scrolling down
        }
    }

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

        if (newState == AbsListView.OnScrollListener. SCROLL_STATE_IDLE) {
          //you can change the position according to your need 
       if(recyclerView.getLayoutManager().findFirstVisibleItemPosition()<2)
          {
           fabAddNew.hide();
          }  
         else{
           fabAddNew.show();
          }              
        } 
    }
});

您可以阅读文档 here for more detail

关于java - 在 RecyclerView 中的指定元素上显示 float 操作按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43974306/

相关文章:

java - RecyclerView不显示数据

android - RecyclerView 中的 View 与父级宽度不匹配

java - ThroughputConnectionFactory、ConnectionFactory、XAConnectionFactory 和 XAConnectionThroughputConnectionFactory 之间有什么区别

android - Android中查询、备份、删除、插入联系人

android - 获取所选项目值抛出 IndexOutOfBoundsException

android - 在 onUpgrade 中更改表

java - 谷歌应用引擎 500 错误

java - 如何使用 if/else 语句表示 boolean 表达式?这是正确的吗?

JavaFX 的 Spinner 在输入空文本时引发 NullPointerException

android - 回收站 View : how to add OnClick() and keep onLongClick() working?