实现场景:点击置顶按钮,滑动到第一条
解决问题:第一条显示不全问题
1、按钮监听
if (i == R.id.go_top) {
shopGoodListRecycler.smoothScrollToPosition(0);
isSmoothToTop = true;
}
2、recyclerview监听
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
if (isSmoothToTop) {
//解决item=0显示不全问题(异常:图片上面还有文字,正常:图片在最上面)
LinearLayoutManager manager = (LinearLayoutManager) recyclerView.getLayoutManager();
int firstVisibleItemPosition = manager.findFirstVisibleItemPosition();
if (firstVisibleItemPosition == 0) {
int top = recyclerView.getChildAt(0).getTop();
if (top < 0) {
//第二次滚动(最后的300米!)
recyclerView.smoothScrollBy(0, top);
}
}
}
}
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
if (!isRefreshing && newState == RecyclerView.SCROLL_STATE_IDLE
&& mAdapter.isHasMore()
&& mLlm.findLastVisibleItemPosition() >= mData.size() - 1) {
loadMore();
}
LinearLayoutManager manager = (LinearLayoutManager) recyclerView.getLayoutManager();
int firstVisibleItemPosition = manager.findFirstVisibleItemPosition();
// 当不滚动时
if (newState == RecyclerView.SCROLL_STATE_IDLE) {
// 判断是否滚动超过一个item
if (firstVisibleItemPosition == 0) {
go_top.setVisibility(View.INVISIBLE);
isSmoothToTop = false;
} else {
go_top.setVisibility(View.VISIBLE);
}
} else if (newState == RecyclerView.SCROLL_STATE_DRAGGING) {//拖动中
go_top.setVisibility(View.INVISIBLE);
}
}
});
3、注意isSmoothToTop=false的位置
注意重新取recyclerview的布局管理者
LinearLayoutManager manager = (LinearLayoutManager) recyclerView.getLayoutManager();
int firstVisibleItemPosition = manager.findFirstVisibleItemPosition();
4、不能在onScrollStateChanged的不滚动状态做,会有卡顿现象
5、拓展:带smooth字样的是具有滑动效果
smoothScrollToPosition(0)具有滑动效果
scrollToPosition(0)没有滑动效果
recyclerView. 
当使用RecyclerView的smoothScrollToPosition(0)方法实现点击置顶按钮滑动到第一条时,可能会遇到第一条显示不全的问题。解决方法包括监听按钮和RecyclerView的滚动状态,注意在合适的时机执行平滑滚动,并确保正确获取RecyclerView的布局管理者。避免在onScrollStateChanged的不滚动状态下执行操作以防止卡顿。此外,对比了smoothScrollToPosition和scrollToPosition的区别,前者带有平滑滑动效果,后者则无。
2413

被折叠的 条评论
为什么被折叠?



