erfunxandy Ответов: 1

Таймер обратного отсчета Android в recyclerview


Я вставляю обратный отсчет времени внутри ReclyerView, показывая значение внутри textview. Обратный отсчет времени отлично работает, когда запускает мою активность
Моя проблема заключается в том, что когда я прокручиваю ReclyerView и возвращаюсь к предыдущим элементам ،таймер не работает должным образом и отображает неправильные цифры

Что я уже пробовал:

if (mListDiscountTab.get(holder.getAdapterPosition()).getmCountDownTimer() == null) {
                        mListDiscountTab.get(holder.getAdapterPosition()).setmCountDownTimer(new CountDownTimer((((mListDiscountTab.get(holder.getAdapterPosition()).getHour() * 60 * 60) + (mListDiscountTab.get(holder.getAdapterPosition()).getMinute() * 60) + (mListDiscountTab.get(holder.getAdapterPosition()).getSecond())) * 1000), 1000) {
                            @Override
                            public void onTick(long millisUntilFinished) {
                                Log.d("herePOU", holder.getAdapterPosition()+"");
                                long sec = (millisUntilFinished / 1000);
                                ((ViewHolderItem) holder).tv_item_timer_hour_home_discount.setText(NumberConverter.Number_English_to_Persian(sec / 3600));
                                ((ViewHolderItem) holder).tv_item_timer_minute_home_discount.setText(NumberConverter.Number_English_to_Persian(((sec % 3600) / 60)));
                                ((ViewHolderItem) holder).tv_item_timer_second_home_discount.setText(NumberConverter.Number_English_to_Persian((sec % 3600) % 60));
                            }

                            @Override
                            public void onFinish() {
                                mListDiscountTab.remove(holder.getAdapterPosition());
                                notifyItemRemoved(holder.getAdapterPosition());
                            }
                        });
                        mListDiscountTab.get(holder.getAdapterPosition()).getmCountDownTimer().start();

                    }

1 Ответов

Рейтинг:
0

Gerry Schmitz

Затем отключите таймер или "примите уклончивые меры", когда вы прокручиваете.

Нет ничего необычного в том, чтобы иметь "конфликт", когда потоки / события начинают перекрываться; тогда вам нужно подумать о "синхронизации".

Обычно регистрируют события (скажем, в текстовом блоке), чтобы определить их порядок срабатывания и состояние.