简体   繁体   English

RecyclerView中的Android CountDownTimer

[英]Android CountDownTimer in RecyclerView

I insert a countDownTimer inside ReclyerView by showing the value inside a textview . 我通过显示textview的值在ReclyerView插入一个countDownTimer The countDownTimer Works fine when runs my Activity My problem is that when I Scrolling through the ReclyerView and returning to the previous items، The timer does not work properly and display incorrect numbers countDownTimer在运行我的Activity时工作正常我的问题是,当我滚动浏览ReclyerView并返回到前面的项目时,计时器无法正常工作并显示不正确的数字

onBindViewHolder

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();

                    }

Please try add a field sec to your object, set holder's textView UI by checking the object's sec. 请尝试在对象中添加字段秒,通过检查对象的秒来设置持有者的textView UI。

onBindViewHolder

    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);
                mListDiscountTab.get(holder.getAdapterPosition()).setSec(sec);
                notifyDataChanged();
            }

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

    ((ViewHolderItem) holder).tv_item_timer_hour_home_discount.setText(NumberConverter.Number_English_to_Persian(mListDiscountTab.get(holder.getAdapterPosition()).getSec() / 3600));
    ((ViewHolderItem) holder).tv_item_timer_minute_home_discount.setText(NumberConverter.Number_English_to_Persian(((mListDiscountTab.get(holder.getAdapterPosition()).getSec() % 3600) / 60)));
    ((ViewHolderItem) holder).tv_item_timer_second_home_discount.setText(NumberConverter.Number_English_to_Persian((mListDiscountTab.get(holder.getAdapterPosition()).getSec() % 3600) % 60));

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM