防止双击OnClickListener

问题描述 投票:3回答:5

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

有人可以帮我找到一个解决方案,以防止一切都被上传到服务器时点击?

newPostBtn.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        // I want to set my button to enabled false here
    }
}
java android button onclicklistener double-click
5个回答
2
投票

为什么不使用setOnAction

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

    newPostBtn.setEnabled(false);
}) ;

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

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

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

0
投票

您也可以尝试使用setClickable

在Android中,无法点击的窗口小部件不会响应点击事件

view.setClickable(假);

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

// I want to set my button to enabled false here
}}
© www.soinside.com 2019 - 2024. All rights reserved.