測(cè)試給提了一個(gè)bug扒磁,登錄按鈕連續(xù)點(diǎn)擊兩次會(huì)發(fā)生登錄成功又退出到登錄頁(yè)糕档,后來(lái)發(fā)現(xiàn)所負(fù)責(zé)模塊的點(diǎn)擊事件都會(huì)發(fā)生這種情況——連續(xù)點(diǎn)擊產(chǎn)生多次事件拔第。
究其原因点寥,是因?yàn)榘粹o添加了點(diǎn)擊效果艾疟,造成了響應(yīng)的延遲。
想過(guò)讓它被一次點(diǎn)擊之后置為不可點(diǎn)擊狀態(tài)敢辩,可是一想就登錄按鈕來(lái)說(shuō)“如果斷網(wǎng)怎么辦”等諸多邏輯判斷可能會(huì)造成較多量代碼蔽莱。本著盡可能少寫代碼的原則,那么解決方法就是在點(diǎn)擊效果發(fā)生的時(shí)間段之內(nèi)不讓它再被點(diǎn)擊戚长,可以把時(shí)間設(shè)為1秒或者其他的時(shí)間盗冷。
代碼如下:
public abstract class NoMoreOnClickListener implements View.OnClickListener {
public static final int MIN_CLICK_DELAY_TIME = 1000;
private long lastClickTime = 0;
@Override
public void onClick(View v) {
long currentTime = Calendar.getInstance().getTimeInMillis();
if (currentTime - lastClickTime > MIN_CLICK_DELAY_TIME) {
lastClickTime = currentTime;
onNoMoreClick(v);
}
}
public abstract void onNoMoreClick(View v);
}
代碼比較簡(jiǎn)單,用法如下:
private View.OnClickListener mOnClickListener = new NoMoreOnClickListener() {
@Override
public void onNoMoreClick(View v) {
//TODO:
}
};