Android SwipeRefreshLayout 、RecyclerView冲突下拉冲突的解决方案

SwipeRefreshLayout和RecyclerView一起使用的时候,有时出现RecyclerView没有滑动到顶部,手指向下滑动时,触发了SwipeRefreshLayout的刷新事件,造成了冲突。

首先来看一个http://blog.csdn.net/zhangweiwtmdbf/article/details/41206369博客分享的一个解决方法,如下:

mLayoutManager = new LinearLayoutManager(getActivity());
			//mPicListView是RecyclerView对象
			mPicListView.setLayoutManager(mLayoutManager);
			mPicListView.setOnScrollListener(new OnScrollListener() {
				@Override
				public void onScrollStateChanged(RecyclerView recyclerView,
						int newState) {
					super.onScrollStateChanged(recyclerView, newState);
					//加载更多
					if (!isLoading
							&& hasMore
							&& mAdapter.getItemCount() == (mLayoutManager
									.findLastVisibleItemPosition() + 1)
							&& newState == RecyclerView.SCROLL_STATE_IDLE) {
						isLoading = true;
						requestServerArticleMore();
					}
				}

				@Override
				public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
					super.onScrolled(recyclerView, dx, dy);
					//解决RecyclerView和SwipeRefreshLayout共用存在的bug
					mRefreshLayout.setEnabled(mLayoutManager
							.findFirstCompletelyVisibleItemPosition() == 0);
				}
			});

这个我试了下,也能解决,但与单个item不会超过屏幕高度的情况下,上面的解决方法是可行的,反之就不行了。

找了好久,又找到了更好的解决办法:

http://stackoverflow.com/questions/25178329/recyclerview-and-swiperefreshlayout

recyclerView.setOnScrollListener(new RecyclerView.OnScrollListener(){
        @Override
        public void onScrolled(RecyclerView recyclerView, int dx, int 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);
        }
    });

圆满解决问题。

  • 6
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值