Запобігайте подвійному натисканню на OnClickListener

Я намагався перешкодити користувачеві двічі натискати на кнопку. Я намагався використати setEnabled на моєму сценарії, але нічого не відбувається! Мої проблеми, я намагався зробити це в setOnClickListener .

Може хто-небудь, будь ласка, допоможіть мені знайти рішення, щоб запобігти натисканню, поки все завантажується на сервер?

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

5 Відповіді

Чому б не використовувати setOnAction ?

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

    newPostBtn.setEnabled(false);
}) ;
2
додано

1) зробити змінну екземпляра:

 private int buttonClicks;

2) екземпляр вашої змінної в onCreate

 buttonClicks = 0;

3) set if() оператор в onClickListener

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

                //run code
                }
                   buttonClicks++;
1
додано

Нижче наведено три способи виправлення:

Вимкніть кнопку з setEnabled (false) , поки користувач не зможе знову натиснути на неї.

Above given solution is also a way to fix it.

Іншим рішенням є

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 (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
}}
0
додано
ІТ КПІ - Java
ІТ КПІ - Java
436 учасників

android_jobs_ua
android_jobs_ua
120 учасників

Публикуем вакансии и запросы на поиск работы по направлению Android. Здесь всё: full-time, part-time, remote и разовые подработки.

Mobile Dev Jobs UA
Mobile Dev Jobs UA
20 учасників

Публикуем вакансии и запросы на поиск работы по направлению iOS, Android, Xamarin, RN и т.д.