防止双击OnClickListener

时间:2018-08-31 00:15:38

标签: java android button onclicklistener double-click

我试图阻止用户两次单击我的按钮。我尝试在脚本上使用setEnabled,但是什么也没有发生!我的问题是,我尝试在setOnClickListener中这样做。

有人可以帮我找到解决方案,以防止在所有内容都上传到服务器时单击吗?

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

5 个答案:

答案 0 :(得分:2)

为什么不使用setOnAction

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

    newPostBtn.setEnabled(false);
}) ;

答案 1 :(得分:1)

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++;

答案 2 :(得分:0)

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

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

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

另一种解决方法是

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();
    }
}

答案 3 :(得分:0)

有时下一个屏幕/动作要花一些时间才能执行,而频繁点击或单击视图会多次执行下一个屏幕/动作。我通过计算两次单击之间的时间来解决此问题。请在下面找到代码示例:

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
    }
}

答案 4 :(得分:0)

您也可以尝试 setClickable

在Android中,不可点击的小部件将不会响应点击事件

  

view.setClickable(false);

nameserver 169.254.169.254
search c.k8s-project-193906.internal google.internal**