欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間:2016年12月29日 16:28:20   作者:lplj717  
btn點擊用戶可能只點擊了一次但是后臺響應(yīng)了多次,像一些表單的提交出現(xiàn)這種問題比較棘手,本篇文章主要介紹Android防止點擊過快造成多次響應(yīng)事件的解決方法,有興趣的可以了解一下。

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

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

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

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

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

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

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

自定義一個CheckDoubleClickListener,繼承自O(shè)nClickListener,其中的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設(shè)置點擊事件時用CheckDoubleClickListener代替OnClickListener,并且實現(xiàn)方法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,就忽視——即能防止誤操作的連續(xù)點擊導(dǎo)致重復(fù)事件。MIN_CLICK_DELAY_TIME可調(diào)。

優(yōu)勢:

好處是不用改變原有代碼的邏輯,就只需要兩個替換:CheckDoubleClickListener代替OnClickListener,onCheckDoubleClick代替onClick。 代碼的結(jié)構(gòu)等都不需要做改變,不需要關(guān)心處理更改btn的狀態(tài)這些額外判斷邏輯,只需要關(guān)注業(yè)務(wù)邏輯即可,代碼是不是變得很簡潔了呢?一起加油吧。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論