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);  
        }  
    });  

圆满解决问题

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • ... ... 大神总结:拿来学习http://blog.csdn.net/jdsjlzx/article/det...
    next_discover阅读 3,349评论 0 0
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,254评论 25 709
  • 也许一年后, 是陌生与忘记 也许没有我的陪伴, 你会更好更快乐, 也许没有你的陪伴, 我会学会怎样坚强, 我丢了你...
    灬赵冰儿阅读 1,423评论 0 1
  • 感情和情感是一个回事吗? 中国的文字就是博大精深,如果非得分出个差别来,我个人认为后者描述更多的是个体的思维行动的...
    RogenY阅读 3,440评论 0 0
  • 在我的记忆里,我家从来没有过节一说,没有其他家里的欢乐氛围也没有能在饭桌上有说有笑的场面更没有全家聚在一起看电视的...
    围巍阅读 4,077评论 0 2