在安卓系统中防止双击按钮的最佳方法是什么?


当前回答

扩展的Kotlin方法:

fun View.setOneTimeClickListener(delayMillis: Long = 1000, block: () -> Unit) {
    setOnClickListener {
        this.isEnabled = false
        block()
        postDelayed({ isEnabled = true }, delayMillis)
    }

在代码中的用法:

someView.setOneTimeClickListener { someFun() }

delayMillis参数可用于设置按钮将被禁用的时间。

someView.setOneTimeClickListener(500) { someFun() }

其他回答

扩展的Kotlin方法:

fun View.setOneTimeClickListener(delayMillis: Long = 1000, block: () -> Unit) {
    setOnClickListener {
        this.isEnabled = false
        block()
        postDelayed({ isEnabled = true }, delayMillis)
    }

在代码中的用法:

someView.setOneTimeClickListener { someFun() }

delayMillis参数可用于设置按钮将被禁用的时间。

someView.setOneTimeClickListener(500) { someFun() }

setEnabled(false)非常适合我。

我写{setEnabled(true);},并在第一次点击按钮时将其设为false。

我希望这能帮助你,把代码放在你的事件处理程序。

// --------------------------------------------------------------------------------

    boolean hasTag = null != which.getTag( R.id.preventing_double_click_tag );

    if ( hasTag ) {
        // Do not handle again...
        return;
    } else {
        which.setTag( R.id.action, Boolean.TRUE );

        which.postDelayed( new Runnable() {
            @Override
            public void run() {
                which.setTag( R.id.action, null );
                Log.d( "onActin", " The preventing double click tag was removed." );
            }

        }, 2000 );
    }

试试这个Kotlin扩展函数:

private var lastClickTime = 0L

fun View.click(action: () -> Unit) {
    setOnClickListener {
        if (SystemClock.elapsedRealtime() - lastClickTime < 600L)
            return@setOnClickListener
        lastClickTime = SystemClock.elapsedRealtime()
        action()
    }
}

它还防止在同一时间点击应用程序的各个部分。

加上Jim的回答,代码可以变得更简洁:

fun View.setOnSingleClick(onClick: () -> Unit) {
    var lastClickTime = 0L
    setOnClickListener {
        if (currentTimeMillis() > lastClickTime + 750) onClick()
        lastClickTime = currentTimeMillis()
    } 
}

用法:

aView.setOnSingleClick {  }