読者です 読者をやめる 読者になる 読者になる

炊きたてのご飯が食べたい

定時に帰れるっていいね。自宅勤務できるっていいね。子どもと炊きたてのご飯が食べられる。アクトインディでは積極的にエンジニアを募集中です。

Android での二度押し防止施策


アクトインディ Advent Calendar 2016 23日目の記事になります。子どもとおでかけ情報アプリ「いこーよ」は、マップ上で簡単におでかけ先を探せる検索アプリです。記事を見てくれたパパさん、ママさん、ぜひ一度使ってみてください^^

iko-yo.net

Kotlin 1.0.5
minSdkVersion 19
targetSdkVersion 25

本日の記事は Android アプリでの二度押し防止施策について書きたいと思います。 API と通信を行うアプリを作成していると、保存や送信ボタンの連続タップ時の例外的な処理を考慮に入れる必要が出てくると思うので、連打防止施策のちょっとした tips を紹介したいと思います。 ProgressDialog を表示して、処理が完了したら Dialog を消すといった方法も考えましたが Dialog が表示されるまでのちょっとした間でも、タップ処理が連続して反応してしまう為、ボタンをタップしたら 0.5 秒間 isEnabled = false にして、ボタンのタップ処理を無効にする方法を採用しました。 ImageButton や Button は View を継承しているので View の Extension としてタップを禁止する処理を入れています。

  • ViewExtension.kt
/**
 * 二度押し防止施策として 0.5 秒間タップを禁止する
 */
fun View.notPressTwice() {
    this.isEnabled = false
    this.postDelayed({
        this.isEnabled = true
    }, 500L)
}

連続タップを禁止したいボタンの setOnClickListener で以下のように呼び出します。

postButton.setOnClickListener {
    postButton.notPressTwice()
    // 後続の処理を書く
}