Предотвратить двойной щелчок на OnClickListener - PullRequest
0 голосов
/ 31 августа 2018

Я пытался запретить пользователю дважды нажимать на мою кнопку. Я пытался использовать 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 голосов
/ 31 августа 2018

Вы также можете попробовать 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
}}
0 голосов
/ 31 августа 2018

Иногда для следующих экранов / действий требуется время, и частые касания или щелчки по представлению выполняют этот следующий экран / действие несколько раз. Я решил эту проблему, посчитав время между двумя кликами. Пожалуйста, найдите пример кода ниже:

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 голосов
/ 31 августа 2018

Почему бы не использовать setOnAction?

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

    newPostBtn.setEnabled(false);
}) ;
0 голосов
/ 31 августа 2018

Ниже приведены три способа исправить это:

Отключите кнопку с помощью 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();
    }
}
0 голосов
/ 31 августа 2018

1) сделать переменную экземпляра:

 private int buttonClicks;

2) создать экземпляр вашей переменной в onCreate

 buttonClicks = 0;

3) установить оператор if () в onClickListener

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

                //run code
                }
                   buttonClicks++;
...