防止按鈕重複點擊

App中,有很大一部分場景是點擊按鈕,向服務端提交數據,由於網絡請求需要時間,用戶很可能會多次點擊,造成數據重複提交,造成各種莫名其妙的問題。因此,防止按鈕多次點擊,是Android開發中一個很重要的技術手段。

下面介紹兩種解決方式:

      1.每個按鈕點擊事件中,記錄點擊時間,判斷是否超過點擊時間間隔

private long mLastClickTime = 0;
public static final long TIME_INTERVAL = 1000L;
private Button btTest;
private void initView() {
    btTest = findViewById(R.id.bt_test);
    btTest.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            long nowTime = System.currentTimeMillis();
            if (nowTime - mLastClickTime > TIME_INTERVAL) {
                // do something
                mLastClickTime = nowTime;
            } else {
                Toast.makeText(MainActivity.this, "不要重複點擊", Toast.LENGTH_SHORT).show();
            }
        }
    });
}

這種方式,每個點擊事件都需要寫一個時間判斷,重複代碼很多。

     2.封裝一個點擊事件,處理點擊間隔判斷

public abstract class CustomClickListener implements View.OnClickListener {
    private long mLastClickTime;
    private long timeInterval = 1000L;

    public CustomClickListener() {

    }

    public CustomClickListener(long interval) {
        this.timeInterval = interval;
    }

    @Override
    public void onClick(View v) {
        long nowTime = System.currentTimeMillis();
        if (nowTime - mLastClickTime > timeInterval) {
            // 單次點擊事件
            onSingleClick();
            mLastClickTime = nowTime;
        } else {
            // 快速點擊事件
            onFastClick();
        }
    }

    protected abstract void onSingleClick();
    protected abstract void onFastClick();
}

使用:

btTest.setOnClickListener(new CustomClickListener() {
    @Override
    protected void onSingleClick() {
        Log.d("xxx", "onSingleClick");
    }

    @Override
    protected void onFastClick() {
        Log.d("xxx", "onFastClick");
    }
});

相比於第一種方式,這種方法將重複點擊的判斷封裝在CustomClickListener內部,外部無需處理時間判斷,只需要實現點擊方法即可。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章