防止双击 OnClickListener

Prevent double click on OnClickListener

我试图阻止用户点击我的按钮两次。我尝试在我的脚本中使用 setEnabled 但没有任何反应!我的问题是,我试图在 setOnClickListener.

中做到这一点

有人可以帮我找到一个解决方案来防止在将所有内容上传到服务器时点击吗?

newPostBtn.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        // I want to set my button to enabled false here
    }
}

1) 创建一个实例变量:

 private int buttonClicks;

2) 在 onCreate

中实例化你的变量
 buttonClicks = 0;

3) 在 onClickListener 中设置 if() 语句

newPostBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) { 
            if (buttonClicks == 1){
               buttonClicks = 0;
               //do nothing
               } else {

                //run code
                }
                   buttonClicks++;

为什么不使用 setOnAction

newPostBtn.setOnAction(e -> {
    (your logic goes here)

    newPostBtn.setEnabled(false);
}) ;

以下是解决此问题的三种方法:

使用 setEnabled(false) 禁用按钮,直到用户可以安全地再次单击它。

给出的解决方案也是一种解决方法。

另一个解决方案是

private long lastClickTime = 0;

View.OnClickListener buttonHandler = new View.OnClickListener() {
    public void onClick(View v) {
        // preventing double, using threshold of 1000 ms
        if (SystemClock.elapsedRealtime() - lastClickTime < 1000){
            return;
        }

        lastClickTime = SystemClock.elapsedRealtime();
    }
}

有时下一个 screens/actions 需要时间来执行,频繁点击或点击视图会多次执行下一个 screen/action。我通过计算两次点击之间的时间解决了这个问题。请在下面找到代码示例:

button.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        // mis-clicking prevention, using threshold of 1000 ms
        if (SystemClock.elapsedRealtime() - mLastClickTime < 1000){
            return;
        }
        mLastClickTime = SystemClock.elapsedRealtime();

        // do your action here
    }
}

您也可以尝试 setClickable

在Android中,不可点击的widget不会响应点击事件

view.setClickable(false);

newPostBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
        v.setClickable(false);

// I want to set my button to enabled false here
}}