首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当刷新正在进行时,Android块滑动刷新操作。

当刷新正在进行时,Android块滑动刷新操作。
EN

Stack Overflow用户
提问于 2017-12-15 10:33:05
回答 2查看 1.3K关注 0票数 1

我需要人帮我处理窃听器。我已经为这个bug寻找了三天的解决方案,我解释了一下情况:我想显示一些卡片,假设它们是10,我还为它们实现了一个计数器。它们是生成的,但是一旦我使用刷新操作(在很短的时间内多次),卡片的数量就会增加一倍(计数器= 20,显示每个卡片的副本)。

我正在尝试实现android的刷卡刷新功能,我使用它的循环视图包含卡片,除了当我启动刷新操作时,在刷新过程中,它不是禁用刷新功能,并且可以多次更新(取决于速度,甚至3次),卡片数量和相应计数器的数量翻了一倍(或三倍)。我尝试使用以下函数:

代码语言:javascript
复制
mSwipeRefreshLayout1.setEnabled(false);

这是我正在使用的代码:

代码语言:javascript
复制
mSwipeRefreshLayout1 = (SwipeRefreshLayout) findViewById(R.id.swipeRefreshLayout);
mSwipeRefreshLayout1.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
        @Override
        public void onRefresh() {
            mSwipeRefreshLayout1.setEnabled(false);
            refreshContent();
            mSwipeRefreshLayout1.setEnabled(true);
        }
    });

这是刷新功能:

代码语言:javascript
复制
/*** refresher action ***/
private void refreshContent(){
    cardList.clear();    // clear the card list
    count = 0;           // reset the counter
    // build cards and counter
    mSwipeRefreshLayout1.setRefreshing(false);
}

我也在尝试,但什么也没有:

代码语言:javascript
复制
/*** refresher action ***/
private void refreshContent(){
    cardList.clear();    // clear the card list
    count = 0;           // reset the counter
    mSwipeRefreshLayout1.setEnabled(false);      //*
    // build cards and set counter
    mSwipeRefreshLayout1.setRefreshing(false);   
    mSwipeRefreshLayout1.setEnabled(true);       //*
}

因为如果我等待刷新(动画)操作正常工作,我需要在上一次刷新期间禁用刷新操作的内容,因此我不会遇到这个错误。谢谢。

编辑:

我也在尝试,但什么也没有:

代码语言:javascript
复制
mSwipeRefreshLayout1.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
        @Override
        public void onRefresh() {
            if (control){
                control = false;    // boolean 
                refreshContent();
                control = true;
            }
        }
    });
EN

回答 2

Stack Overflow用户

发布于 2017-12-15 10:41:37

您可以使用boolean isLoading标志和回调进行简单的修复。

代码语言:javascript
复制
void refresh() {
    if(!isLoading) {
        isLoading = true;
        loadYourData(() -> {
            isLoading = false;
        })
    }
}

现在,当用户在刷新过程中激活刷新时,什么都不会发生。不要忘记添加一些错误回调(如果需要的话)。

票数 0
EN

Stack Overflow用户

发布于 2017-12-15 11:08:58

多年来我一直在使用这种方法:

代码语言:javascript
复制
mSwipeRefreshLayout1.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
        @Override
        public void onRefresh() {
            refreshContent();
        }
    });

还有你的refreshContent()方法:

代码语言:javascript
复制
private void refreshContent() {
   mSwipeRefreshLayout1.post(new Runnable() {
            @Override
            public void run() {
                mSwipeRefreshLayout1.setRefreshing(true);
            }
        });

  //call async method to load data....
}

在您收到数据后进行回调时:

代码语言:javascript
复制
private void callback() {
    mSwipeRefreshLayout1.post(new Runnable() {
            @Override
            public void run() {
                mSwipeRefreshLayout1.setRefreshing(false);
            }
        });

   //clear the view and load it again
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47830454

复制
相关文章

相似问题

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