2017-04-06 21 views
0

Ich habe eine Recycler-Ansicht, die Markt hat, so dass das Füllen und Auffrischen von asynctask alle 3 Sekunden aufgerufen wird. Ich möchte, dass sich der Wert einer bestimmten Spalte im Recycler ändert, wenn sie für einen Bruchteil einer Sekunde hervorgehoben werden soll, und zwar in dem Wissen, dass wir die notifyDataSetChanged-Methode nicht überschreiben können. Es ist nicht praktikabel, die alte Array-Liste zu verfolgen und jedes Element darin mit den Elementen des neuen zu vergleichen, also bitte, wenn Sie eine wertvolle Lösung dafür haben, mir das zur Verfügung zu stellen.Markieren Sie sich ändernde Daten in RecyclerView

+0

[ 'DiffUtils'] (https://developer.android.com/reference/android/support/v7/util/DiffUtil.html) wird Ihnen helfen, haben, welche Elemente zu verstehen, wurde geändert. – azizbekian

+0

gibt es eine Probe oder etwas bitte? –

+0

[Hier ist] (https://medium.com/@nullthemall/diffutil-is-a-must-797502bc1149) ein netter. – azizbekian

Antwort

0

es

Gelöst
  //<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> 
Verwandte Themen