2016-02-11 4 views
0

Я хочу создать список, на котором отображаются оставшиеся предметы для каждого элемента, пожалуйста, скажите, как я могу добавить это в просмотр ресайклера, я видел решение для представления List, но оно не работает в режиме просмотра ресайклеров.Как добавить счетчик таймера для каждого элемента списка в recyclerview

How to handle multiple countdown timers in ListView?

@Override 
    public void onBindViewHolder(final ItemHolder holder, final int position) { 

     setDefferinceTimer(holder, mListItems.get(position).expirationTime); 
    /* 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, long 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 = itemEndDate - System.currentTimeMillis(); 

    diffSeconds = diff/1000 % 60; 
    diffMinutes = diff/(60 * 1000) % 60; 
    diffHours = diff/(60 * 60 * 1000) % 24; 
    diffDays = diff/(24 * 60 * 60 * 1000); 

    itemHolder.textView_time.setText("" + diffDays + " Days " + diffHours + " Hours " + diffMinutes + " minuts " + diffSeconds + " seconds"); 


} 

ответ

1

поместить этот код в методе onCreateView вашего фрагмента, имеющего recylerview после инициализации всех виджетов и адаптер

final Handler mainHandler = new Handler(Looper.getMainLooper()); 
      updateFuture = Executors.newSingleThreadScheduledExecutor().scheduleAtFixedRate(new Runnable() { 
       @Override## Heading ## 
       public void run() { 
        final int firstVisible = linearLayoutManager.findFirstVisibleItemPosition(); 
        final int lastVisible = linearLayoutManager.findLastVisibleItemPosition(); 

        mainHandler.post(new Runnable() { 
         @Override 
         public void run() { 
          adapter.notifyItemRangeChanged(firstVisible, lastVisible - firstVisible + 1); 
         } 
        }); 
       } 
      }, 0, 1000, TimeUnit.MILLISECONDS); 
+0

добавить в onDestroyed метод если (updateFuture! = NULL) { updateFuture.cancel (истина); updateFuture = null; } –

Смежные вопросы