Задержка утилизатора просмотр каждого элемента нажмите функциональность - PullRequest
0 голосов
/ 23 апреля 2020

У меня есть recyclerview. Я хочу достичь одной функциональности, но не могу ее реализовать. Мой элемент RecyclerView имеет 2 textView и button.

public class Task {

private String id;
private String title;

public String getId() {
    return id;
}

public void setId(String id) {
    this.id = id;
}

public String getTitle() {
    return title;
}

public void setTitle(String title) {
    this.title = title;
}
}

Итак, позвольте мне объяснить немного. Кнопка в моем элементе recyclerView использует stateListDrawable, поэтому она становится активной / неактивной при нажатии. Когда пользователь нажимает на кнопку, и она становится активной, я должен отправить данные элемента (название, идентификатор) в бэкэнд. И когда пользователь нажимает на неактивную кнопку, я отправляю запрос на удаление в бэкэнд для этого элемента. Но проблема в том, что пользователь может нажимать несколько раз на одну и ту же кнопку, и я не хочу каждый раз отправлять запрос на выполнение. Например, я могу нажимать одну и ту же кнопку 4 раза в секунду, и она становится активной / неактивной, поэтому я не хочу делать 4-5 запросов в секунду. Я думаю, что решение состоит в том, чтобы добавить задержку для событий клика, и, например, через 500 или 1000 мс после клика отправить данные в бэкэнд. Я пытался использовать Handler и на самом деле это сработало. Например, когда я нажимал 2-й, а затем 4-й и 5-й элементы, после секунды каждого щелчка я мог отправлять данные в бэкэнд. Но есть и проблема. Когда я нажимаю на одну и ту же кнопку несколько раз, через секунду она отправляет на сервер несколько запросов. Я пытался сделать removeCallbacksAndMessages() на каждом клике перед запуском обработчика, но есть и другая проблема. Например, когда я щелкаю несколько раз по второму элементу и после этого нажимаю по третьему элементу, я отправляю только данные третьего элемента в бэкэнд. Но я хочу отправить данные 2-го и 3-го элементов в бэкэнд. Так может ли кто-нибудь помочь мне достичь этой функциональности?

1 Ответ

1 голос
/ 23 апреля 2020
private long mLastClickTime = 0;

...

// inside onCreate or so:

findViewById(R.id.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 magic here
    }
}

Подробнее см. Здесь: Android Предотвращение двойного нажатия на кнопку

...