【发布时间】:2018-05-29 13:15:23
【问题描述】:
我需要帮助解决一个错误。 我找了三天这个bug的解决方法,我解释一下情况:我想展示一些卡片,假设它们是10,我也为它们实现了一个计数器。它们是生成的,但是一旦我使用刷新操作(在很短的时间内多次),卡片的数量就会增加一倍(计数器 = 20,显示每张卡片的副本)。
我正在尝试实现android的刷卡刷新(pull-to-refresh)功能,我将它与包含卡片的recyclerview一起使用,除了当我启动时一切正常刷新动作,然后在刷新期间,它不会禁用刷新功能并且可以多次更新(取决于速度甚至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;
}
}
});
【问题讨论】:
-
如果您只是加载同步方法,为什么还要集成 swipeRefresh/loading?还是您的卡数据列表来自 API 调用?
-
我需要从数据库中读取数据,不是静态数据。
-
好的,我已经添加了一个答案,我已经包含了关于如何在我的所有项目中处理滑动刷新布局的代码。 (实际上我几乎所有的项目都有刷卡刷新)。您只需要在滑动刷新时调用 post() 然后从那里调用 swipeRefreshLayout 的 setRefreshing() 方法
-
你找到解决这个问题的方法了吗??
标签: android android-cardview pull-to-refresh swiperefreshlayout swipe-gesture