在RecyclerView中的指定元素上显示浮动操作按钮

时间:2017-05-15 08:06:46

标签: java android android-recyclerview

我只是在滚动到recyclerView的特定元素时尝试显示fab。 这是我的布局,我想出了所有用于缩短目的的东西。 所以我希望它能在2,3,3 ......项目上显示,并且不会在我的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();
        }
    });

我想要写得很好的解决方案。 (我假设有一个,由谷歌提供,但我无法为其提供资金) 谢谢。

1 个答案:

答案 0 :(得分:3)

添加RecyclerView.OnScrollListener并使用为您提供newState的onScrollStateChanged(RecyclerView recyclerView, int newState)回调,您应该使用SCROLL_STATE_IDLE to fetch its 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