Изменения значения таймера onScroll RecyclerView в адаптере - PullRequest
0 голосов
/ 04 декабря 2018

У меня есть таймер обратного отсчета в recyclerView для каждой строки, при первой загрузке данных он показывает правильные данные.Но как только я прокрутил вниз и вернулся к предыдущему этапу, таймер обратного отсчета показывает неверные данные.Я следовал за многими такими вопросами, но не могу понять.

JSON RESPONSE

    {
"contest_id":10,
"contest_name":"PAK vs AUS",
"contest_time":"30.12.2018, 22:30:00",
"current_time":"04.12.2018, 11:16:50",
"micro_time":1543902410.850009918212890625,
"milliseconds":1543902410850
}

CODE onBindViewHolder Код:

String parseServerDate= contestList.getContestTime();
        String cureentServerDate = contestList.getCurrentTime();
              if (holder.timer != null) {
            holder.timer.cancel();
        }
        cureentServerDate= cureentServerDate.replaceAll(","," ");
        parseServerDate= parseServerDate.replaceAll(","," ");
        holder.countDownStart(cureentServerDate,parseServerDate,holder,position);



private void countDownStart(String s1, String s2, final MyViewHolder holder, int position) {
        d1 = null;
        d2 = null;
        SimpleDateFormat formatter = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss");
        try {
            d1 = formatter.parse(s1);
            d2 = formatter.parse(s2);
            diff = d2.getTime() - d1.getTime();
            diffSeconds = diff / 1000 % 60;
            diffMinutes = diff / (60 * 1000) % 60;
            diffHours = diff / (60 * 60 * 1000) % 24;
            diffDays = diff / (24 * 60 * 60 * 1000);

            mydiff = TimeUnit.DAYS.toMillis(diffDays)+TimeUnit.HOURS.toMillis(diffHours)+TimeUnit.MINUTES.toMillis(diffMinutes)+TimeUnit.SECONDS.toMillis(diffSeconds);
            calculateTimer(mydiff);

        }
        catch (Exception e)
        {
            System.out.print(e);
        }
    }




public void calculateTimer(long mydiff){

       timer =  new CountDownTimer(mydiff,1000) {
            @RequiresApi(api = Build.VERSION_CODES.N)
            public void onTick(long millisUntilFinished) {
                /*converting the milliseconds into days, hours, minutes and seconds and displaying it in textviews */
                mDays.setText(checkDigit(Integer.parseInt(String.valueOf(TimeUnit.HOURS.toDays(TimeUnit.MILLISECONDS.toHours(millisUntilFinished))))) + "Days");
                mHH.setText(checkDigit(Integer.parseInt(String.valueOf((TimeUnit.MILLISECONDS.toHours(millisUntilFinished) - TimeUnit.DAYS.toHours(TimeUnit.MILLISECONDS.toDays(millisUntilFinished)))))) + "" + ":");
                mMM.setText(checkDigit(Integer.parseInt(String.valueOf((TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished) - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(millisUntilFinished)))))) + ":");
                mSS.setText(checkDigit(Integer.parseInt(String.valueOf((TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished)))))) + "");


            }
            @Override
            public void onFinish() {
            }
        }.start();
    }

1 Ответ

0 голосов
/ 04 декабря 2018

Вы можете попробовать это, это работает для меня, внутри onBindViewHolder, но эта строка

viewHolder.setIsRecyclable(false);
...