我們?cè)陂_(kāi)發(fā)APP的過(guò)程中經(jīng)常會(huì)遇到在某些低端機(jī)或者在機(jī)器響應(yīng)比較慢的情況下手抖連續(xù)點(diǎn)擊某個(gè)頁(yè)面(當(dāng)然不排除有些人故意這么做)重復(fù)彈出好幾個(gè)相同的頁(yè)面银受,不過(guò)我發(fā)現(xiàn)微信這樣的應(yīng)用都沒(méi)有做處理……但還是要分享一下我是怎么解決的。
1妄均、通過(guò)判斷兩次點(diǎn)擊的時(shí)間間隔來(lái)防止重復(fù)點(diǎn)擊
工具類(lèi):
/**
* Created by mafei on 15/12/8.
*/
public class NoDoubleClickUtils {
private static long lastClickTime;
private final static int SPACE_TIME = 500;
public static void initLastClickTime() {
lastClickTime = 0;
}
public synchronized static boolean isDoubleClick() {
long currentTime = System.currentTimeMillis();
boolean isClick2;
if (currentTime - lastClickTime >
SPACE_TIME) {
isClick2 = false;
} else {
isClick2 = true;
}
lastClickTime = currentTime;
return isClick2;
}
}
使用方式:
/**
* 點(diǎn)擊事件
*/
private View.OnClickListener logListener = new View.OnClickListener() {
@Override
public void onClick(View view) {
if (!NoDoubleClickUtils.isDoubleClick()) {
事件響應(yīng)方法
}
}
};
2毙驯、通過(guò)修改manifest中頁(yè)面的launchMode屬性改為單例模式
<!-- 市場(chǎng)網(wǎng)貸產(chǎn)品頁(yè) -->
<activity
android:name=".activity.market.CreditRecordActivity"
android:launchMode="singleTask"
android:screenOrientation="portrait" />
3倒堕、利用RxBinding實(shí)現(xiàn)防重復(fù)點(diǎn)擊
RxBinding 是 Jake Wharton 的一個(gè)開(kāi)源庫(kù),它提供了一套在 Android 平臺(tái)上的基于 RxJava 的 Binding API尔苦。
RxView.clickEvents(button)
.throttleFirst(500, TimeUnit.MILLISECONDS)
.subscribe(clickAction);
FullStackEngineer的公眾號(hào)涩馆,更多分享