在用戶使用 Android 應(yīng)用的時(shí)候,經(jīng)常會出現(xiàn)過快且多次點(diǎn)擊同一按鈕的情況,一方面這是因?yàn)閼?yīng)用或手機(jī)當(dāng)前有些卡頓,另一方面也可能是由于很多應(yīng)用并沒有設(shè)置按鈕點(diǎn)擊時(shí)的 selector 或者其它按鈕響應(yīng)方式(例如點(diǎn)擊按鈕時(shí)按鈕放大,常見于游戲),導(dǎo)致用戶誤認(rèn)為沒有點(diǎn)擊到當(dāng)前按鈕,當(dāng)然,除了相對應(yīng)的對應(yīng)用進(jìn)行優(yōu)化和設(shè)置點(diǎn)擊selector以外,我們還可以做一些其它的工作,例如,判斷按鈕的 onClick 事件在規(guī)定事件段內(nèi)只響應(yīng)一次(在論壇的搜索功能中,我們常見到每10秒才可以進(jìn)行一次搜索的設(shè)置,這就在一定程度上減少了無效的網(wǎng)絡(luò)訪問量,減輕服務(wù)器壓力,APP同理),就如下面代碼所示:
public final class AppUtils { private AppUtils() { } private static long mLastClickTime;// 用戶判斷多次點(diǎn)擊的時(shí)間 public static boolean isFastDoubleClick() { long time = System.currentTimeMillis(); if (Math.abs(time - mLastClickTime) < 500) { return true; } mLastClickTime = time; return false; }}btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (AppUtils.isFastDoubleClick()){ // 進(jìn)行點(diǎn)擊事件后的邏輯操作 } } });另一種方式。。。。 新建一個(gè)onclicklistener
public abstract class OnMultiClickListener implements View.OnClickListener{ // 兩次點(diǎn)擊按鈕之間的點(diǎn)擊間隔不能少于1000毫秒 private static final int MIN_CLICK_DELAY_TIME = 1000; private static long lastClickTime; public abstract void onMultiClick(View v); @Override public void onClick(View v) { long curClickTime = System.currentTimeMillis(); if((curClickTime - lastClickTime) >= MIN_CLICK_DELAY_TIME) { // 超過點(diǎn)擊間隔后再將lastClickTime重置為當(dāng)前點(diǎn)擊時(shí)間 lastClickTime = curClickTime; onMultiClick(v); } }}btn.setOnClickListener(new OnMultiClickListener() { @Override public void onMultiClick(View v) { // 進(jìn)行點(diǎn)擊事件后的邏輯操作 } });以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持武林網(wǎng)。
新聞熱點(diǎn)
疑難解答
圖片精選