Android 防抖動(dòng),防止重復(fù)點(diǎn)擊

1.概況:

? 在app 使用中經(jīng)常遇到界面中按鈕 點(diǎn)擊時(shí) 連續(xù)點(diǎn)擊兩次或者多次,導(dǎo)致按鈕下邏輯功能重復(fù)執(zhí)行,造成資源浪費(fèi)甚至程序出錯(cuò),為了盡量避免這種情況出現(xiàn),提出防抖動(dòng)方法。

2.實(shí)現(xiàn)思路

<1.? 主要思路為 通過(guò)兩次點(diǎn)擊的時(shí)間差,來(lái)對(duì)比是否在最短時(shí)間內(nèi),來(lái)判斷點(diǎn)擊是否有效。

<2. 不同view 通過(guò)對(duì)比當(dāng)前點(diǎn)擊View 的id 判斷是否是同一個(gè)view,如果是同一個(gè)view 進(jìn)行防抖動(dòng)校驗(yàn),如果不是同一個(gè)view,重置當(dāng)前校驗(yàn)。

3.代碼實(shí)現(xiàn)



public class NoDoubleClickUtil {

? ? public static int mId = -1;

? ? private static long mFirstClickTime;//記錄首次點(diǎn)擊時(shí)間

? ? public static boolean checkDoubleClick(int id) {

? ? ? ? long clickTime = System.currentTimeMillis();//記錄當(dāng)前點(diǎn)擊時(shí)間

? ? ? ? if (mId == -1 || mId != id) {//不同view,重置

? ? ? ? ? ? mId = id;

? ? ? ? ? ? mFirstClickTime = clickTime;

? ? ? ? ? ? return true;

}

? ? ? ? if (clickTime - mFirstClickTime > Constant.NO_DOUBLE_CLICK_TIME) {

? ? ? ? //判斷當(dāng)前時(shí)間差是否大于校驗(yàn)時(shí)長(zhǎng),如果大于 判斷為此次不是無(wú)效點(diǎn)擊

? ? ? ? ? ? mFirstClickTime = clickTime;

? ? ? ? ? ? return true;

? ? ? ? } else {

? ? ? ? ? ? return false;

}

}

}



4.代碼中使用



@OnClick({R.id.tv_text1, R.id.tv_text2})

public void onViewClicked(View view) {

? ? if (!NoDoubleClickUtil.checkDoubleClick(view.getId())) {//判斷如果是錯(cuò)誤點(diǎn)擊,直接返回,不執(zhí)行操作

? ? ? ? return;

}

? ? switch (view.getId()) {

? ? ? ? case R.id.tv_text1:

? ? ? ? ? ? ToastUtils.showShortToast(MyApplication.mContext, "點(diǎn)擊1:" + System.nanoTime());

? ? ? ? ? ? break;

? ? ? ? case R.id.tv_text2:

? ? ? ? ? ? ToastUtils.showShortToast(MyApplication.mContext, "點(diǎn)擊2:" + System.nanoTime());

? ? ? ? ? ? break;

}

}



最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容