Java timstamp在recyclerview中不断变化

Java timstamp在recyclerview中不断变化,java,android,android-recyclerview,Java,Android,Android Recyclerview,我有一个recyclerview,它有50多个数据。这里我显示了时间戳的差异 new Handler(Looper.getMainLooper()).postDelayed(new Runnable() { @Override public void run() { try{ long mtime = TimeUnit.MILLISECONDS.toMinutes(System

我有一个recyclerview,它有50多个数据。这里我显示了时间戳的差异

new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {
            @Override
            public void run() {
                try{
                    long mtime = TimeUnit.MILLISECONDS.toMinutes(System.currentTimeMillis())-TimeUnit.MILLISECONDS.toMinutes(Long.parseLong(time));
                    if (mtime<60){
                        holder.timestamp.setText(String.valueOf(mtime)+ " mins");
                        if (mtime==1)
                            holder.timestamp.setText(1+ " min");
                        else if (mtime<1){
                            holder.timestamp.setText("Just Now");

                        }
                        else
                            holder.timestamp.setText(mtime+ " mins");
                    }
                    else if (mtime>60 && mtime<1440){
                        if (mtime/60==1)
                            holder.timestamp.setText(String.valueOf(mtime/60)+ " hour");
                        else
                            holder.timestamp.setText(String.valueOf(mtime/60)+ " hours");
                    }
                    else if (mtime>1440&&mtime<10080){
                        if (mtime/1440==1)
                            holder.timestamp.setText(String.valueOf(mtime/1440)+ " day");
                        else
                            holder.timestamp.setText(String.valueOf(mtime/1440)+ " days");
                    }else if(mtime>10080&&mtime<3679200){
                        if (mtime/10080==1)
                            holder.timestamp.setText(String.valueOf(mtime/10080)+ " week");
                        else
                            holder.timestamp.setText(String.valueOf(mtime/10080)+ " weeks");

                    }else if(mtime>3679200){
                        if (mtime/3679200==1)
                            holder.timestamp.setText(String.valueOf(mtime/3679200)+ " year");
                        else
                            holder.timestamp.setText(String.valueOf(mtime/3679200)+ " years");
                    }
                }catch (Exception e){

                }

                h.postDelayed(this,1000);
            }
        },1000);
newhandler(Looper.getMainLooper()).postDelayed(newrunnable()){
@凌驾
公开募捐{
试一试{
long mtime=TimeUnit.millides.toMinutes(System.currentTimeMillis())-TimeUnit.millides.toMinutes(long.parseLong(time));

如果(mtimeyes,因为您正在使用
new处理程序(Looper.getMainLooper()).postDelayed()
。为什么在此处使用
Handler
?UI线程中已经调用了
RecyclerView适配器
回调

正如我在代码中看到的,每次滚动时,时间戳都会在1s后显示。如果滚动速度快(实际上一直如此),1s后,行视图就会被重用并显示另一项


因此,要解决您的问题,您需要删除代码中的
处理程序

您可能希望将
System.currentTimeMillis()
存储为
循环之外的值
它仍在重复其他值@scarywombat在这种情况下,每1秒重复一次应该使用什么?