2017-06-05 8 views
0

私は50以上のデータを持つrecyclerviewを持っています。そしてそこにタイムスタンプの違いを示します。timstampは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); 

正常に動作します。しかし、私がrecyclerviewをスクロールすると、他のrecyclerview項目のタイムスタンプでタイムスタンプを変更し続けます。

Timestamp flash gif

+0

あなたはおそらく、 'loop'の外の値として' System.currentTimeMillis() 'を保存したいと考えています。 –

+0

まだ他の値を繰り返しています@ScaryWombat – Bucky

答えて

0

はい、あなたはnew Handler(Looper.getMainLooper()).postDelayed()を使用しているため。なぜHandlerを使用しますか? RecyclerView Adapterコールバックは既にUIスレッドで呼び出されています。

私のコードで見るように、スクロールするたびにタイムスタンプが1秒後に表示されます。あなたが速くスクロールすると(実際にはいつも)、1秒後に、あなたの行ビューは既に再利用され、別のアイテムが表示されます。

したがって、問題を解決するには、コード内のhandlerを削除する必要があります。

+0

1秒ごとに何回繰り返すべきですか? – Bucky

関連する問題