title: How to handle multiple countdown timers in RecyclerView?
body: <p>I have a <code>Recyclerview</code> , and I need to display a countdown on every row. </p>
  
  <p>Here is a similar question 
  <a href="https://stackoverflow.com/questions/31059251/how-to-handle-multiple-countdown-timers-in-listview">coutndown timers in listview</a> 
  It has a good solution , but I need that with recyclerview</p>
  
  <p><a href="https://i.stack.imgur.com/FnKA6.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/FnKA6.png" alt="enter image description here"></a></p>
  
  <p><strong>Edit:</strong></p>
  
  <p>Here is my code Adapter
  <code>MyAdapter</code>:</p>
  
  <pre><code> public class AdapterItems extends RecyclerView.Adapter&lt;RecyclerView.ViewHolder&gt; {
  
  private ArrayList&lt;TopCompetitions&gt; mListItems = new ArrayList&lt;&gt;();
  private ImageLoader mImageLoader;
  private Context context;
  private Handler handler;
  /******************************************/
  String current_date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
  SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  Date d1 = null;
  Date d2 = null;
  long diff;
  long diffSeconds;
  long diffMinutes;
  long diffHours;
  long diffDays;
  
  String reachableDate = "";
  /******************************************/
  private ScheduledFuture updateFuture;
  
  public AdapterItems(Context context) {
  
      this.context = context;
      mImageLoader = AppController.getInstance().getImageLoader();
  
  }
  
  public void setmListItems(ArrayList&lt;TopCompetitions&gt; mListItems) {
      this.mListItems = mListItems;
      //update the adapter to reflect the new set of mListItems
      notifyDataSetChanged();
  }
  
  
  @Override
  public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
  
  
      View itemView = LayoutInflater.
              from(parent.getContext()).
              inflate(R.layout.custom_horizontal_row, parent, false);
      return new ItemHolder(itemView);
  
  
  }
  
  @Override
  public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
  
  
      final TopCompetitions currentItem = mListItems.get(position);
      final ItemHolder itemHolder = (ItemHolder) holder;
  
     /* start_date , name_com_ar , name_com_en,
              question_en,answer_ar1,answer_ar2,answer_ar3
              ,answer_en1,answer_en2,answer_en3,right_answer;
      */
      itemHolder.item_id.setText(currentItem.getPrize_id());
      itemHolder.item_description.setText(currentItem.getName_com_ar());
      itemHolder.start_date.setText(currentItem.getStart_date());
      itemHolder.end_date.setText(currentItem.getEnd_date());
      itemHolder.name_com_ar.setText(currentItem.getName_com_ar());
      itemHolder.name_com_en.setText(currentItem.getName_com_en());
      itemHolder.answer_en1.setText(currentItem.getAnswer_en1());
      itemHolder.answer_en2.setText(currentItem.getAnswer_en2());
      itemHolder.answer_en3.setText(currentItem.getAnswer_en3());
      itemHolder.answer_ar1.setText(currentItem.getAnswer_ar1());
      itemHolder.answer_ar2.setText(currentItem.getAnswer_ar2());
      itemHolder.answer_ar3.setText(currentItem.getAnswer_ar3());
      itemHolder.right_answer.setText(currentItem.getRight_answer());
      itemHolder.question_en.setText(currentItem.getQuestion_en());
      itemHolder.question_ar.setText(currentItem.getQuestion_ar());
      itemHolder.desc_ar.setText(currentItem.getPrize_desc_ar());
      itemHolder.desc_en.setText(currentItem.getPrize_desc_en());
  
      String urlLogo = currentItem.getPrize_pic1();
      loadImages(urlLogo, itemHolder);
      setDefferinceTimer(itemHolder , currentItem.getEnd_date());
  
  
      if (updateFuture == null) {
          final Handler mainHandler = new Handler(Looper.getMainLooper());
          updateFuture = Executors.newSingleThreadScheduledExecutor().scheduleAtFixedRate(new Runnable() {
              @Override
              public void run() {
                  setDefferinceTimer(itemHolder , currentItem.getEnd_date());
                  notifyDataSetChanged();
                  mainHandler.post(new Runnable() {
                      @Override
                      public void run() {
                          notifyDataSetChanged();
                      }
                  });
              }
          }, 0, 1000, TimeUnit.MILLISECONDS);
      }
  
    /*  new Handler(Looper.getMainLooper()).post(new Runnable() {
          @Override
          public void run() {
              new CountDownTimer(20000, 1000) {
  
                  public void onTick(long millisUntilFinished) {
                      startCountDown(itemHolder, currentItem.getEnd_date() + " 00:00:00");
                      notifyDataSetChanged();
                  }
  
                  public void onFinish() {
                      //counterTextView.setText("done!");
                  }
              }.start();
          }
      });
         */
  
  }
  
  public void setDefferinceTimer(final RecyclerView.ViewHolder holder , String itemEndDate){
  
      final ItemHolder itemHolder = (ItemHolder) holder;
  
      current_date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
     // reachableDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(itemEndDate);
  
      try {
          d1 = format.parse(current_date);
          d2 = format.parse(itemEndDate+" 00:00:00");
      } catch (ParseException e) {
          e.printStackTrace();
      }
  
      diff = d2.getTime() - d1.getTime();
  
      diffSeconds = diff / 1000 % 60;
      diffMinutes = diff / (60 * 1000) % 60;
      diffHours = diff / (60 * 60 * 1000) % 24;
      diffDays = diff / (24 * 60 * 60 * 1000);
  
      itemHolder.days_tf.setText(""+diffDays);
      itemHolder.hours_tf.setText(""+diffHours);
      itemHolder.minutes_tf.setText(""+diffMinutes);
      itemHolder.seconds_tf.setText(""+diffSeconds);
  
  }
  
  private void loadImages(String urlThumbnail, final RecyclerView.ViewHolder holder) {
      final ItemHolder itemHolder = (ItemHolder) holder;
      mImageLoader.get(urlThumbnail, new ImageLoader.ImageListener() {
          @Override
          public void onResponse(ImageLoader.ImageContainer response, boolean isImmediate) {
              itemHolder.item_image.setImageBitmap(response.getBitmap());
              //holder.salon_gender.setImageBitmap(response.getBitmap());
          }
  
          @Override
          public void onErrorResponse(VolleyError error) {
  
          }
      });
  }
  
  
  @Override
  public int getItemCount() {
      return mListItems.size();
  }
  
  
  private class ItemHolder extends RecyclerView.ViewHolder {
  
      public TextView item_id, item_description, end_date,
              start_date, name_com_ar, name_com_en, question_ar,
              question_en, answer_ar1, answer_ar2, answer_ar3, answer_en1,
              answer_en2, answer_en3, right_answer , desc_ar , desc_en;
      public TextView days_tf, hours_tf, minutes_tf, seconds_tf;
      public CircleImageView item_image;
  
      public ItemHolder(View itemView) {
          super(itemView);
  
          start_date = (TextView) itemView.findViewById(R.id.start_date);
          end_date = (TextView) itemView.findViewById(R.id.end_date);
          name_com_ar = (TextView) itemView.findViewById(R.id.name_com_ar);
          name_com_en = (TextView) itemView.findViewById(R.id.name_com_en);
          question_en = (TextView) itemView.findViewById(R.id.question_en);
          question_ar = (TextView) itemView.findViewById(R.id.question_ar);
          desc_ar = (TextView) itemView.findViewById(R.id.desc_ar);
          desc_en = (TextView) itemView.findViewById(R.id.desc_en);
          answer_ar1 = (TextView) itemView.findViewById(R.id.answer_ar1);
          answer_ar2 = (TextView) itemView.findViewById(R.id.answer_ar2);
          answer_ar3 = (TextView) itemView.findViewById(R.id.answer_ar3);
          answer_en1 = (TextView) itemView.findViewById(R.id.answer_en1);
          answer_en2 = (TextView) itemView.findViewById(R.id.answer_en2);
          answer_en3 = (TextView) itemView.findViewById(R.id.answer_en3);
          right_answer = (TextView) itemView.findViewById(R.id.right_answer);
  
  
          item_id = (TextView) itemView.findViewById(R.id.item_id);
          item_description = (TextView) itemView.findViewById(R.id.item_description);
          item_image = (CircleImageView) itemView.findViewById(R.id.item_image);
  
  
          days_tf = (TextView) itemView.findViewById(R.id.days_tf);
          hours_tf = (TextView) itemView.findViewById(R.id.hours_tf);
          minutes_tf = (TextView) itemView.findViewById(R.id.minutes_tf);
          seconds_tf = (TextView) itemView.findViewById(R.id.seconds_tf);
  
      }
  
  
  
  }
  </code></pre>