我试图仅在滚动到 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/