android 防止重復(fù)點(diǎn)擊

??android 防止重復(fù)點(diǎn)擊是一個(gè)非常常見(jiàn)的需求顾孽,每個(gè)人都有各自的點(diǎn)擊事件的處理習(xí)慣,有的喜歡使用匿名內(nèi)部類锉桑,有的activity陪白、fragment、自定義View等繼承點(diǎn)擊事件然后在onClick()方法中根據(jù)id用switch實(shí)現(xiàn)各自View的點(diǎn)擊事件硬纤。

??我自己的習(xí)慣呢解滓,就是用switch進(jìn)行分發(fā),統(tǒng)一在一個(gè)地方管理點(diǎn)擊事件筝家。之前增刪改之類的操作都彈出確認(rèn)對(duì)話框洼裤,所以不存在防止重復(fù)點(diǎn)擊。但是近來(lái)產(chǎn)品經(jīng)理覺(jué)得就刪除給確認(rèn)對(duì)話框就行了溪王,其它的直接發(fā)請(qǐng)求就行了腮鞍。
于是我需要在原來(lái)代碼基礎(chǔ)上迅速增加防止重復(fù)點(diǎn)擊的功能。
我記得大概的防止重復(fù)點(diǎn)擊有實(shí)現(xiàn)setOnTouchListener的莹菱,有實(shí)現(xiàn)setOnClickListener的移国,也有用靜態(tài)工具方法的。
??比如:

public abstract class OnClickEvent implements View.OnClickListener {
    private static long lastTime;
    public abstract void singleClick(View v);
    private long delay;
    public OnClickEvent(long delay) {
        this.delay = delay;
    }
    @Override
    public void onClick(View v) {
        if (onMoreClick(v)) {
            return;
        }
        singleClick(v);
    }
    public boolean onMoreClick(View v) {
        boolean flag = false;
        long time = System.currentTimeMillis() - lastTime;
        if (time < delay) {
            flag = true;
        }
        lastTime = System.currentTimeMillis();
        return flag;
    }
}

??比如:

public class Utils {
    private static final int MIN_CLICK_DELAY_TIME = 1000;
    private static long lastClickTime;
    public static boolean isFastClick() {
        boolean flag = false;
        long curClickTime = System.currentTimeMillis();
        if ((curClickTime - lastClickTime) >= MIN_CLICK_DELAY_TIME) {
            flag = true;
        }
        lastClickTime = curClickTime;
        return flag;
    }
}

??因?yàn)槲掖a中所有點(diǎn)擊事件都統(tǒng)一實(shí)現(xiàn)onClick用switch根據(jù)id分發(fā)道伟,所以要增加防止重復(fù)點(diǎn)擊迹缀,實(shí)現(xiàn)接口的方式就不太現(xiàn)實(shí)了。所以我覺(jué)得才有靜態(tài)工具的方式蜜徽。
但是普通靜態(tài)工具的方式祝懂,那個(gè)lastTime是全局的,這顯然是不科學(xué)的拘鞋,可以遇見(jiàn)連續(xù)點(diǎn)兩個(gè)按鈕的時(shí)候第二個(gè)按鈕點(diǎn)點(diǎn)擊事件會(huì)被當(dāng)做重復(fù)點(diǎn)擊給忽略掉砚蓬,雖然這個(gè)問(wèn)題不太容易被產(chǎn)品經(jīng)理發(fā)現(xiàn),但是我自己覺(jué)得還是不爽掐禁。于是我采用了下面這種靜態(tài)工具方法:

private static boolean avoidRepeatClick(View view){
        boolean flag = false;
        long lastTime = view.getTag(-1)==null?0:(long)view.getTag(-1);
        if (System.currentTimeMillis()-lastTime>1000){
            flag = true;
        }
        view.setTag(-1,System.currentTimeMillis());
        return flag;
    }

??用view的tag屬性來(lái)保存自己的點(diǎn)擊時(shí)機(jī)怜械,代碼更少,不會(huì)出現(xiàn)上述問(wèn)題傅事,只需要避免-1這個(gè)tag的key和其它沖突缕允,不過(guò)重度使用view的tag屬性時(shí)一般都會(huì)在String中定義id,沖突的可能性很小蹭越。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末障本,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌驾霜,老刑警劉巖案训,帶你破解...
    沈念sama閱讀 218,607評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異粪糙,居然都是意外死亡强霎,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門蓉冈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)城舞,“玉大人,你說(shuō)我怎么就攤上這事寞酿〖叶幔” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 164,960評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵伐弹,是天一觀的道長(zhǎng)拉馋。 經(jīng)常有香客問(wèn)我,道長(zhǎng)惨好,這世上最難降的妖魔是什么煌茴? 我笑而不...
    開(kāi)封第一講書人閱讀 58,750評(píng)論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮昧狮,結(jié)果婚禮上景馁,老公的妹妹穿的比我還像新娘。我一直安慰自己逗鸣,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,764評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布绰精。 她就那樣靜靜地躺著撒璧,像睡著了一般。 火紅的嫁衣襯著肌膚如雪笨使。 梳的紋絲不亂的頭發(fā)上卿樱,一...
    開(kāi)封第一講書人閱讀 51,604評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音硫椰,去河邊找鬼繁调。 笑死,一個(gè)胖子當(dāng)著我的面吹牛靶草,可吹牛的內(nèi)容都是我干的蹄胰。 我是一名探鬼主播,決...
    沈念sama閱讀 40,347評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼奕翔,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼裕寨!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 39,253評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤宾袜,失蹤者是張志新(化名)和其女友劉穎捻艳,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體庆猫,經(jīng)...
    沈念sama閱讀 45,702評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡认轨,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,893評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了月培。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片嘁字。...
    茶點(diǎn)故事閱讀 40,015評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖节视,靈堂內(nèi)的尸體忽然破棺而出拳锚,到底是詐尸還是另有隱情,我是刑警寧澤寻行,帶...
    沈念sama閱讀 35,734評(píng)論 5 346
  • 正文 年R本政府宣布霍掺,位于F島的核電站,受9級(jí)特大地震影響拌蜘,放射性物質(zhì)發(fā)生泄漏杆烁。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,352評(píng)論 3 330
  • 文/蒙蒙 一简卧、第九天 我趴在偏房一處隱蔽的房頂上張望兔魂。 院中可真熱鬧,春花似錦举娩、人聲如沸析校。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,934評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)智玻。三九已至,卻和暖如春芙代,著一層夾襖步出監(jiān)牢的瞬間吊奢,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,052評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工纹烹, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留页滚,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,216評(píng)論 3 371
  • 正文 我出身青樓铺呵,卻偏偏與公主長(zhǎng)得像裹驰,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子陪蜻,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,969評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,152評(píng)論 25 707
  • ¥開(kāi)啟¥ 【iAPP實(shí)現(xiàn)進(jìn)入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開(kāi)一個(gè)線程邦马,因...
    小菜c閱讀 6,424評(píng)論 0 17
  • 原文地址:http://www.android100.org/html/201606/06/241682.html...
    AFinalStone閱讀 928評(píng)論 0 1
  • z=x+y的分布函數(shù)。 比喻為小明能吃一碗飯,小紅能吃兩碗飯滋将。小明加起來(lái)能吃的飯就是z=x+y邻悬。 網(wǎng)關(guān):比喻為你被...
    我是一個(gè)好人嗎閱讀 388評(píng)論 0 0
  • 001.運(yùn)動(dòng)前后注重拉伸。 用5-10分鐘的時(shí)間進(jìn)行拉伸随闽,避免運(yùn)動(dòng)中受到傷害父丰。運(yùn)動(dòng)后更應(yīng)該拉伸,避免肌肉酸痛掘宪。 0...
    影子倒了閱讀 368評(píng)論 2 2