Android SwipeRefreshLayout 嵌套 CoordinatorLayout 下拉刷新 事件冲突解决

来源:互联网 发布:linux daemon 作用 编辑:程序博客网 时间:2024/04/25 08:19

问题

我们滚动的布局控件 ScrollView 或NestScrollView 加一个SwipeRefreshLayout下拉刷新,会出现这样一种情况:
先将ScrollView 向上滑动一部分,然后松手,然后再向下滑动,.此时会出现先触发swipeRefreshLayout的问题。
影响客户体验。

解决

当ScrollView到顶部以后才触发刷新事件。
1 如果 SwipeRefreshLayout 直接嵌套一个 ScrollView 或NestScrollView ,判断ScrollView 是否滑动到顶端。进而动态设置 SwipeRefreshLayout 是否可用 即可解决。

 scrollView.getViewTreeObserver().addOnScrollChangedListener(new  ViewTreeObserver.OnScrollChangedListener() {        @Override        public void onScrollChanged() {           // 这只一定是 == ,不能是 <= ,scrollView 会自己调整            swipeRefreshLayout.setEnabled(scrollView.getScrollY()==0);        }    });

2 如果 SwipeRefreshLayout 嵌套一个 CoordinatorLayout 布局,CoordinatorLayout 布局里面有ScrollView ,用上面的方法 就不行了,是否在顶端就不准确了,
好在 可以 监听 AppBarLayout Offset 的变化,动态设置 SwipeRefreshLayout 是否可用。

 appBarLayout = (AppBarLayout) findViewById(R.id.appbar_layout);        appBarLayout.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() {            @Override            public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) {                if (verticalOffset >= 0) {                    mSwipeRefreshLayout.setEnabled(true);                } else {                    mSwipeRefreshLayout.setEnabled(false);                }            }        });

参考
解决SwipeRefreshLayout与ScrollView滑动冲突

Android SwipeRefreshLayout 与 CoordinatorLayout 嵌套刷新

阅读全文
0 0
原创粉丝点击