[Qiita] AndroidのOnClickListenerでの2度押しを防止したい

※この記事は以前Qiitaに投稿されていた古い記事です


AndroidでOnClickListenerを普通に実装して、頑張って連続タップするとイベントが2回発生して、例えば何か画面を開く処理が入ってたら画面が2つ起動しちゃったりするんですよね。
なのでこんな感じの拡張関数を作ってみました。

fun View.setOnOneClickListener(onClick: (view: View?) -> Unit) = setOnClickListener {
    val lastClickTime = getTag(R.id.click_time) as? Long ?: 0L
    setTag(R.id.click_time, SystemClock.elapsedRealtime())
    if (SystemClock.elapsedRealtime() - lastClickTime < 1000) {
        return@setOnClickListener
    }
    onClick(it)
}

これでいいのか感が正直あるので、何か他に良い方法があったら誰か教えてほしいです。

参考

https://stackoverflow.com/questions/5608720/android-preventing-double-click-on-a-button/9950832


元記事のQittaのコメントにて、こういうのもあるよと教えてもらいました(こっちのが良さそう)
https://github.com/JakeWharton/butterknife/blob/master/butterknife-runtime/src/main/java/butterknife/internal/DebouncingOnClickListener.java



コメント

人気の投稿

[Qiita] Google Playのクローズドベータ版テストでメールアドレスを指定して公開する

[Qiita] Androidの実機でPCのlocalhostに接続したり、Webページの要素を検証する

[Qiita] AppCompatのAlertDialogのテーマカラーを変える