timstamp在recyclerview中不断变化

时间:2017-06-05 01:41:56

标签: java android android-recyclerview

我有一个包含50多个数据的recyclerview。在那里我显示时间戳差异。

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

工作正常。但是当我滚动recyclelerview时,它会不断更改其他recyclerview项目的时间戳。

Timestamp flash gif

1 个答案:

答案 0 :(得分:0)

是的,因为您使用的是import CGIHTTPServer import BaseHTTPServer class Handler(CGIHTTPServer.CGIHTTPRequestHandler): cgi_directories = ["/cgi"] PORT = 9999 httpd = BaseHTTPServer.HTTPServer(("", PORT), Handler) print "serving at port", PORT httpd.serve_forever() 。为什么在这里使用new Handler(Looper.getMainLooper()).postDelayed()?已经在UI线程中调用Handler回调。

正如我在您的代码中看到的,每次滚动时,时间戳都会在1秒后显示。如果您快速滚动(实际上您总是这样做),1秒后,您的行视图已经重复使用并显示另一个项目。

因此,要解决您的问题,您需要删除代码中的RecyclerView Adapter