我只是在滚动到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();
}
});
我想要写得很好的解决方案。 (我假设有一个,由谷歌提供,但我无法为其提供资金) 谢谢。
答案 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