适配器中的onScroll RecyclerView计时器值更改

时间:2018-12-04 06:02:20

标签: android android-recyclerview recycler-adapter countdowntimer

我在recyclerView中为每行设置了一个倒数计时器,当数据第一次显示正确的数据时会膨胀。但是,一旦我向下滚动并返回上一级,倒数计时器就会显示错误的数据。我遵循了许多这类问题,但我不知道。

JSON响应

    {
"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
}

代码  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 :(得分:1)

您可以在onBindViewHolder中尝试此操作,但对这一行有用

viewHolder.setIsRecyclable(false);