解决swipeRefreshLayout与RecyclerView的滑动冲突
程序员文章站
2022-06-08 17:51:57
...
网上给出的最多的滑动冲突解决办法思路:首先给RecyclerView添加滑动监听事件,其次获取recyclerView的第一个子布局的位置,如果你是上滑的话,recyclerView.getChildAt(0).getTop()获取的值肯定是个负数,当第一个item项出现,并且在顶部时swipeRefreshLayout才能启用,这样解决滑动冲突,但是这个方法在部分手机上不兼容。
网上的源码大概是这样的:
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
int topRowVerticalPosition =
(recyclerView == null || recyclerView.getChildCount() == 0) ? 0 : recyclerView.getChildAt(0).getTop();
swipeRefreshLayout.setEnabled(topRowVerticalPosition >= 0);
}
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
}
});
其实这样判断是有缺陷的,改成如下
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
int topRowVerticalPosition =
(recyclerView == null || recyclerView.getChildCount() == 0) ? 0 : recyclerView.getChildAt(0).getTop();
swipeRefreshLayout.setEnabled(topRowVerticalPosition >= 0 && recyclerView != null && !recyclerView.canScrollVertically(-1));
}
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
}
});
recyclerView.canScrollVertically(-1)返回false代表不能下拉了,就是到了顶部,两者需要结合起来判断才能真正解决滑动冲突
上一篇: 计算机图形学(二)输出图元_20_章节总结_程序展示_饼图
下一篇: 第九天
推荐阅读
-
html文件中jquery与velocity变量中的$冲突的解决方法
-
Android中DrawerLayout+ViewPager滑动冲突的解决方法
-
python3.8与pyinstaller冲突问题的快速解决方法
-
android基础教程之android的listview与edittext冲突解决方法
-
电脑硬件资源的冲突与解决方法
-
Bootstrap.css与layDate日期选择样式起冲突的解决办法
-
JS中touchstart事件与click事件冲突的解决方法
-
Android 中SwipeRefreshLayout与ViewPager滑动事件冲突解决方法
-
Android ListView与ScrollView冲突的解决方法总结
-
Django与Vue语法的冲突问题完美解决方法