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

问题

我们滚动的布局控件 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 嵌套刷新

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值