我需要人帮我处理窃听器。我已经为这个bug寻找了三天的解决方案,我解释了一下情况:我想显示一些卡片,假设它们是10,我还为它们实现了一个计数器。它们是生成的,但是一旦我使用刷新操作(在很短的时间内多次),卡片的数量就会增加一倍(计数器= 20,显示每个卡片的副本)。
我正在尝试实现android的刷卡刷新功能,我使用它的循环视图包含卡片,除了当我启动刷新操作时,在刷新过程中,它不是禁用刷新功能,并且可以多次更新(取决于速度,甚至3次),卡片数量和相应计数器的数量翻了一倍(或三倍)。我尝试使用以下函数:
mSwipeRefreshLayout1.setEnabled(false);这是我正在使用的代码:
mSwipeRefreshLayout1 = (SwipeRefreshLayout) findViewById(R.id.swipeRefreshLayout);
mSwipeRefreshLayout1.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
mSwipeRefreshLayout1.setEnabled(false);
refreshContent();
mSwipeRefreshLayout1.setEnabled(true);
}
});这是刷新功能:
/*** refresher action ***/
private void refreshContent(){
cardList.clear(); // clear the card list
count = 0; // reset the counter
// build cards and counter
mSwipeRefreshLayout1.setRefreshing(false);
}我也在尝试,但什么也没有:
/*** 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); //*
}因为如果我等待刷新(动画)操作正常工作,我需要在上一次刷新期间禁用刷新操作的内容,因此我不会遇到这个错误。谢谢。
编辑:
我也在尝试,但什么也没有:
mSwipeRefreshLayout1.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
if (control){
control = false; // boolean
refreshContent();
control = true;
}
}
});发布于 2017-12-15 10:41:37
您可以使用boolean isLoading标志和回调进行简单的修复。
void refresh() {
if(!isLoading) {
isLoading = true;
loadYourData(() -> {
isLoading = false;
})
}
}现在,当用户在刷新过程中激活刷新时,什么都不会发生。不要忘记添加一些错误回调(如果需要的话)。
发布于 2017-12-15 11:08:58
多年来我一直在使用这种方法:
mSwipeRefreshLayout1.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
refreshContent();
}
});还有你的refreshContent()方法:
private void refreshContent() {
mSwipeRefreshLayout1.post(new Runnable() {
@Override
public void run() {
mSwipeRefreshLayout1.setRefreshing(true);
}
});
//call async method to load data....
}在您收到数据后进行回调时:
private void callback() {
mSwipeRefreshLayout1.post(new Runnable() {
@Override
public void run() {
mSwipeRefreshLayout1.setRefreshing(false);
}
});
//clear the view and load it again
}https://stackoverflow.com/questions/47830454
复制相似问题