ボタンクリック制御の基本画像

ボタンクリック処理を制御する

setOnClickListener を利用してボタンクリックのハンドリングをすると 複数回クリックした時に何度も同じ処理が行われてしまうので制御してやる必要があります。 この記事では、よくある2種類の制御方法について解説します。


手段

  1. 処理後に制御
  2. 操作を時間差で制御

関数処理後の制御

本来この形がもっとも綺麗な実装だと思います。
処理が終わったタイミングでボタンの制御をします。
例えばAPIの処理をし終わった後などに効果的ですが、デメリットとしてバラバラな場所でボタンの制御をしているため、注意が必要です。
例えば、可読性を考慮した実装にするのが良いと思います。

var button: Button = next_button

private fun clickButton() {
    showIndicator()

    API(this).postLogin(id, password) {
        it.success {
            // todo...
            hideIndicator()
        }
        it.failure { // todo... }
    }  
}

private fun showIndicator() {
    indicator.visibility = View.VISIBLE
    button.isEnabled = false
}

private fun hideIndicator() {
    indicator.visibility = View.GONE
    button.isEnabled = true
}

Activity遷移時の制御

ボタンを押した後にActivityを遷移する場合は、 時間差で制御、もしくわ押せなくしてしまう方法が効果的です。

var button: Button = next_button

private fun clickButton() {
    button.isEnabled = false

    // ↓ お好みでisEnabledを戻す
    Handler().postDelayed({
        button.isEnabled = true    
    }, 1000)

    val intent = Intent(this, MainActivity::class.java)
    startActivity(intent)    
}

アプリは UX を意識した開発がとても重要ですね。

0 コメント