国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android防止點擊過快造成多次響應事件的解決方法

2019-12-12 04:10:41
字體:
來源:轉載
供稿:網友

最近開發過過成中遇到一些小問題,比如一個btn點擊用戶可能只點擊了一次但是后臺響應了多次,像一些表單的提交出現這種問題比較棘手,當然解決這種問題的方案比較多:比如自定義單次點擊的btn,或者在點擊的時候將按鈕設置為不可點擊,或者做一個計時器等等,這些都是解決的方案,至于具體怎么使用,這就要看程序員的編碼風格了,首先來看看具體問題:

onClick事件是Android開發中最常見的事件。比如,一個Button,功能是點擊會提交一個訂單,則一般代碼如下 :

btn.setOnClickListener(new OnClickListener() {       @Override       public void onClick(View v) {          submitOrder();       }     });  

正常情況下這段代碼是沒什么問題的,但是Android設備的機型性能等千差萬別,如果碰到比較卡的手機,則有可能出現submitOrder()函數跳轉頁面出現延遲的現象。碰到這種現象,則用戶就很有可能再次點擊一次,從而造成函數被調用兩次,出現重復訂單的BUG。 一般地,碰到這現象,首先就會想到的就是在點擊之后把submitButton設置為不可點擊:

//代碼 btn.setClickable(false); //或者   btn.setEnabled(false);  

此方法也確實有效,不過如果submitOrder()方法沒有成功,需要再次提交訂單時又需要再重復把submitButton設置為可點擊狀態。如果類似的button比較多時,就顯得比較麻煩、混亂。

下面介紹一下我的處理方法:

自定義一個CheckDoubleClickListener,繼承自OnClickListener,其中的OnCheckDoubleClick是自定義的一個接口,具體看代碼:

CheckDoubleClickListener.Java

package com.huaxia.finance.javastudy.CheckDoubleClick;  import android.view.View;  import java.util.Calendar;  /**  *  * Created by lp on 2016/12/29.  */ public class CheckDoubleClickListener implements View.OnClickListener {   public static final int MIN_CLICK_DELAY_TIME = 1000;   private long lastClickTime = 0;   private OnCheckDoubleClick checkDoubleClick;    public CheckDoubleClickListener(OnCheckDoubleClick checkDoubleClick){     this.checkDoubleClick = checkDoubleClick;   }    @Override   public void onClick(View v) {     long currentTime = Calendar.getInstance().getTimeInMillis();     if (currentTime - lastClickTime > MIN_CLICK_DELAY_TIME) {       lastClickTime = currentTime;       checkDoubleClick.onCheckDoubleClick(v);     }   } } 

OnCheckDoubleClick.java

package com.huaxia.finance.javastudy.CheckDoubleClick;  import android.view.View;  /**  * Created by lp on 2016/12/29.  */ public interface OnCheckDoubleClick {   void onCheckDoubleClick(View view); } 

使用方法:

給btn設置點擊事件時用CheckDoubleClickListener代替OnClickListener,并且實現方法onCheckDoubleClick代替onClick即可,像這樣:

package com.huaxia.finance.javastudy;  import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.Toast;  import com.huaxia.finance.javastudy.CheckDoubleClick.CheckDoubleClickListener; import com.huaxia.finance.javastudy.CheckDoubleClick.OnCheckDoubleClick;  public class CheckDoubleClickActivity extends Activity implements OnCheckDoubleClick {    private Button btn;    private CheckDoubleClickListener checkDoubleClickListener;    @Override   protected void onCreate(Bundle savedInstanceState) {     super.onCreate(savedInstanceState);     setContentView(R.layout.activity_check_double_click);     checkDoubleClickListener = new CheckDoubleClickListener(this);     btn = (Button) findViewById(R.id.btn);     btn.setOnClickListener(checkDoubleClickListener);   }    @Override   public void onCheckDoubleClick(View view) {     Toast.makeText(CheckDoubleClickActivity.this, "Click Response", Toast.LENGTH_SHORT).show();   } } 

原理:

就是用onCheckDoubleClick代替onClick處理具體的操作,在onClick方法中加一個判斷:在接收到點擊事件之后,先判斷一下時間,如果距離上次處理操作不足MIN_CLICK_DELAY_TIME,就忽視――即能防止誤操作的連續點擊導致重復事件。MIN_CLICK_DELAY_TIME可調。

優勢:

好處是不用改變原有代碼的邏輯,就只需要兩個替換:CheckDoubleClickListener代替OnClickListener,onCheckDoubleClick代替onClick。 代碼的結構等都不需要做改變,不需要關心處理更改btn的狀態這些額外判斷邏輯,只需要關注業務邏輯即可,代碼是不是變得很簡潔了呢?一起加油吧。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 岳阳县| 徐水县| 达日县| 玉门市| 磐安县| 循化| 阳新县| 襄汾县| 万年县| 剑河县| 嘉义县| 九台市| 华安县| 栾川县| 云阳县| 德惠市| 屯门区| 新疆| 巫山县| 开封市| 南川市| 叶城县| 万盛区| 响水县| 舟曲县| 泰兴市| 勐海县| 禄劝| 吴江市| 彭州市| 垫江县| 乐陵市| 商洛市| 兴安盟| 台州市| 吉隆县| 阜阳市| 古浪县| 吉林市| 土默特右旗| 邹城市|