首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在实现swipeRefreshLayout时防止用户滚动?

如何在实现swipeRefreshLayout时防止用户滚动?
EN

Stack Overflow用户
提问于 2019-05-29 05:00:08
回答 1查看 122关注 0票数 2

在我的应用程序中,我有一个包含20 - 30个项目的回收器视图,我有拉动来刷新内容的功能,我想防止用户在刷新过程中滚动视图,因为如果用户绑定到滚动,并且正在进行regresh,就会产生错误,但我真的不知道该怎么做:/

代码语言:javascript
复制
eRecyclerView = findViewById(R.id.recycler_view);
        RecyclerView.LayoutManager eLayoutManager = new GridLayoutManager(this, 2);
        eRecyclerView.setLayoutManager(eLayoutManager);

 swipeRefreshLayout = findViewById(R.id.refreshSecondLevel);
        swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
            @Override
            public void onRefresh() { 
               loadNewContent();
               Handler delay = new Handler();
                delay.postDelayed(new Runnable() {
                    @Override
                    public void run() { 
                        swipeRefreshLayout.setRefreshing(false);
                    }
                }, 3000);

            }
        });
EN

回答 1

Stack Overflow用户

发布于 2019-05-29 06:32:40

您应该在RecyclerView.LayoutManager上重写canScrollVertically方法

代码语言:javascript
复制
public class ToggledScrollLayoutManager extends LinearLayoutManager {
    private boolean mIsScrollEnabled = true;

    public ToggledScrollLayoutManager(Context context) {
        super(context);
    }

    public void setScrollEnabled(boolean enabled) {
        this.mIsScrollEnabled = enabled;
    }

    @Override
    public boolean canScrollVertically() {
        return mIsScrollEnabled && super.canScrollVertically();
    }
}

然后在用户刷新页面时使用它:

代码语言:javascript
复制
recyclerView = findViewById(R.id.recyclerView);
ToggledScrollLayoutManager layoutManager = new ToggledScrollLayoutManager();
recyclerView.setLayoutManager(layoutManager);

swipeRefreshLayout = findViewById(R.id.refreshSecondLevel);
swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
    @Override
        public void onRefresh() { 
            loadNewContent();
            layoutManager.setScrollEnabled(false);
            Handler delay = new Handler();
            delay.postDelayed(new Runnable() {
                @Override
                public void run() { 
                    swipeRefreshLayout.setRefreshing(false);
                    layoutManager.setScrollEnabled(true);
                }
            }, 3000);
        }
    }
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56349983

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档