解决SwipeRefreshLayout与RecyclerView下拉冲突的问题

解决SwipeRefreshLayout与RecyclerView下拉冲突的问题

项目结构是这样的,在一个activity中,SwipeRefreshLayout包裹了ViewPager,ViewPager中嵌套了两个Fragment,Fragment中的数据是由一个接口统一返回的,所以需要通过在Activity中请求数据,并交给Fragment去刷新,而其中的Fragment中又嵌套RecyclerView,在RecyclerVier中上滑的时候,直接被SwipeRefreshLayout截获了滑动事件,所以冲突来了。。。
好了啰嗦半天,开始上解决方案吧

主Activity中的代码如下:

    /**
     * //解决RecyclerView和SwipeRefreshLayout上滑冲突的问题
     * @param enabled
     */
    public void setOnScroll(boolean enabled) {
        refreshLayout.setEnabled(enabled);
    }

Fragment中的代码如下:

recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
            @Override
            public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
                super.onScrollStateChanged(recyclerView, newState);
            }

            @Override
            public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
                //解决RecyclerView和SwipeRefreshLayout上滑冲突的问题
                super.onScrolled(recyclerView, dx, dy);
                int topRowVerticalPosition = 
                (recyclerView == null || recyclerView.getChildCount() == 0) ? 0 : recyclerView.getChildAt(0).getTop();
                activity.setOnScroll(topRowVerticalPosition >= 0);
            }
        });

然后,我这边就解决了。。。

你可能感兴趣的:(android开发)