2017-04-06 9 views
0

Marketがあるリサイクラービューを使用しているため、asynctaskの塗りつぶしとリフレッシュは3秒ごとに呼び出されます。リサイクラで特定の列の値が変更された場合、それを数秒間強調表示したい場合、notifyDataSetChangedメソッドをオーバーライドできないことを知る方法は?古いアレイリストを追跡し、その中のすべてのアイテムを新しいアイテムのアイテムと比較することは実現不可能です。貴重な解決策があればそれを教えてください。RecyclerViewのハイライトデータの変更

+0

[ 'DiffUtils']持っている項目を理解するのに役立ちます(https://developer.android.com/reference/android/support/v7/util/DiffUtil.html)解決します変更されました。 – azizbekian

+0

サンプルがありますか何かありますか? –

+0

[こちら](https://medium.com/@nullthemall/diffutil-is-a-must-797502bc1149)いいです。 – azizbekian

答えて

0

は、それが

  //<editor-fold desc="highlighting section"> 
      OnlineOrder oldOrder = oldAllOrders.get(position); 
      OnlineOrder newOrder = newAllOrders.get(position); 

      if (oldOrder.getId() == newOrder.getId()){ 
       //compare here 
       //holder.tvPortfolioItem.setTextColor(newOrder.getPortfolioNumber().equals(oldOrder.getPortfolioNumber()) ? Color.BLACK : Color.RED); 
       //holder.tvPriceItem.setTextColor(newOrder.getPrice() == oldOrder.getPrice() ? Color.BLACK : Color.RED); 
       //holder.tvDateTimeItem.setTextColor(newOrder.getOrderDateTime().equals(oldOrder.getOrderDateTime()) ? Color.BLACK : Color.RED); 

       if (!newOrder.getPortfolioNumber().equals(oldOrder.getPortfolioNumber())){ 

        int colorFrom = Color.RED ; 
        int colorTo = Color.BLACK ; 
        ValueAnimator colorAnimation = ValueAnimator.ofObject(new ArgbEvaluator(), colorFrom, colorTo); 
        colorAnimation.setDuration(2000); // milliseconds 
        colorAnimation.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { 

         @Override 
         public void onAnimationUpdate(ValueAnimator animator) { 
          holder.tvPortfolioItem.setTextColor((int) animator.getAnimatedValue()); 
         } 

        }); 
        colorAnimation.start(); 
       } 

       if (newOrder.getPrice() != oldOrder.getPrice()){ 

        int colorFrom = Color.RED ; 
        int colorTo = Color.BLACK ; 
        ValueAnimator colorAnimation = ValueAnimator.ofObject(new ArgbEvaluator(), colorFrom, colorTo); 
        colorAnimation.setDuration(2000); // milliseconds 
        colorAnimation.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { 

         @Override 
         public void onAnimationUpdate(ValueAnimator animator) { 
          holder.tvPriceItem.setTextColor((int) animator.getAnimatedValue()); 
         } 

        }); 
        colorAnimation.start(); 
       } 


       if (!newOrder.getOrderDateTime().equals(oldOrder.getOrderDateTime())){ 

        int colorFrom = Color.RED ; 
        int colorTo = Color.BLACK ; 
        ValueAnimator colorAnimation = ValueAnimator.ofObject(new ArgbEvaluator(), colorFrom, colorTo); 
        colorAnimation.setDuration(2000); // milliseconds 
        colorAnimation.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { 

         @Override 
         public void onAnimationUpdate(ValueAnimator animator) { 
          holder.tvDateTimeItem.setTextColor((int) animator.getAnimatedValue()); 
         } 

        }); 
        colorAnimation.start(); 
       } 
      } 
      //</editor-fold> 
関連する問題