。。今天在做一个dialog 的列表显示的时候,列表下方有一个搜索框。由于项目采用MVP模式,数据都是通过P层将结果给视图的。这个dialog的判断条件烦了一下午。脑袋晕晕的。终于在3点准时完成了。
1,首次进入dialog
分页加载第一页数据。这里采用了BaseQuickAdapter的自动刷新方式。此时搜索框为空,不需要搜索
2,上拉加载下一页数据。
调用接口,页数为2,保存了第一页数据。后台只给第二页的数据。这样防止数据过多的时候,加载缓慢问题,虽然加了loading。但是提高速度也是必然的。
页数一次+1.
3,以上显示个列表加载下一页都是小问题。
打开dialog后 在输入框进行搜索。此时再次调接口 串入keyword 关键字。页数为1 清空 之前的数据并更新Adapter。
输入数据里没有的内容,并点击搜索。列表显示空白提示页。(注:加载更多的样式也是自定义的。)
1这个不多说网上多的是。
4,再一次输入关键字搜索。此时,手欠连续快速点击了好几下。bug出现
加载的数据重复加载,且加载显示一直在加载中 ,继续狂点。哈哈列表空白了,连空白提示都没。
好,找一防止按钮重复点击的方法被:
网上此类的方法多不胜数:但是并不是每个都适用。
我用了以下这个工具类,亲测好用:
public class ButtonUtils {
private static long lastClickTime =0;
private static long DIFF =1000;
private static int lastButtonId = -1;
/**
* 判断两次点击的间隔,如果小于1000,则认为是多次无效点击
*
* @return
*/
public static boolean isFastDoubleClick() {
return isFastDoubleClick(-1, DIFF);
}
/**
* 判断两次点击的间隔,如果小于1000,则认为是多次无效点击
*
* @return
*/
public static boolean isFastDoubleClick(int buttonId) {
return isFastDoubleClick(buttonId, DIFF);
}
/**
* 判断两次点击的间隔,如果小于diff,则认为是多次无效点击
*
* @param diff
* @return
*/
public static boolean isFastDoubleClick(int buttonId, long diff) {
long time = System.currentTimeMillis();
long timeD = time -lastClickTime;
if (lastButtonId == buttonId &&lastClickTime >0 && timeD < diff) {
Log.v("isFastDoubleClick", "短时间内按钮多次触发");
return true;
}
lastClickTime = time;
lastButtonId = buttonId;
return false;
}
将以上代码复制到自己项目里即可。使用方法:
1注:记录每天学习的小点滴。
网友评论