0

I trying to run multiple timer in my recyclerview from this link Multiple Timer in RecyclerView

But my timer is not running, instead its giving me a static value in the textview. I need to run multiple timers in my recyclerview. I have coded like this..

public class RestoHomeAdapter extends RecyclerView.Adapter<RestoHomeAdapter.ItemHolder> {

    private Context context;
    private List<SendMeDriverRestaurant> ol;
    private final List<ItemHolder> viewHoldersList;
    private SendMeDriverRestaurant o;

    private Handler handler = new Handler();
    private Runnable updateRemainingTimeRunnable = new Runnable() {
        @Override
        public void run() {
            synchronized (viewHoldersList) {
                for (ItemHolder holder : viewHoldersList) {
                    holder.updateTimeRemaining();
                }
            }
        }
    };




    public RestoHomeAdapter(RestoHome restoHome, List<SendMeDriverRestaurant> l) {
        ol = l;
        context = restoHome;
        viewHoldersList = new ArrayList<>();
        startUpdateTimer();
    }

    private void startUpdateTimer() {
        Timer tmr = new Timer();
        tmr.schedule(new TimerTask() {
            @Override
            public void run() {
                handler.post(updateRemainingTimeRunnable);
            }
        }, 1000, 1000);
    }


    @Override
    public RestoHomeAdapter.ItemHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.adapter_resto_home, parent, false);
        return new ItemHolder(v);
    }

    @Override
    public void onBindViewHolder(RestoHomeAdapter.ItemHolder holder, int position) {
        o = ol.get(position);
        holder.OrderName.setText(o.getOrder());
        holder.OrderStatus.setText(o.getStatus());
        if (o.getStatus().equals("New Order")) {
            holder.BackColour.setBackgroundColor(Color.parseColor("#FF7043"));
        } else if (o.getStatus().equals("Waiting")) {
            holder.BackColour.setBackgroundColor(Color.parseColor("#FFCC80"));
        } else if (o.getStatus().equals("Done")) {
            holder.DeliveryTime.setClickable(false);
            holder.BackColour.setBackgroundColor(Color.parseColor("#A5D6A7"));
        }

        synchronized (viewHoldersList) {
            holder.setData(o);
            if (viewHoldersList.size() < (ol.size())) viewHoldersList.add(holder);
        }


    }

    @Override
    public int getItemCount() {
        return ol.size();
    }

    public class ItemHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

        ImageView BackColour;
        TextView OrderName, DeliveryTime, OrderStatus;

        public ItemHolder(View itemView) {
            super(itemView);
            BackColour = itemView.findViewById(R.id.back_color);
            OrderName = itemView.findViewById(R.id.order_name);
            DeliveryTime = itemView.findViewById(R.id.delivery_time);

            OrderStatus = itemView.findViewById(R.id.delivery_status);
            DeliveryTime.setOnClickListener(this);
        }

        @Override
        public void onClick(View v) {
            switch (v.getId()) {
                case R.id.delivery_time:
                    String abc = DeliveryTime.getText().toString();
                    Intent in = new Intent(context, TimerActivity.class);
                    in.putExtra("order_name", abc);
                    context.startActivity(in);
            }
        }

        public void setData(SendMeDriverRestaurant ol) {
            o = ol;
        }

        public void updateTimeRemaining() {
          //  if(o.getStatus().equalsIgnoreCase("Waiting")) {
              //  Log.e("hetal",o.getOrder());
                try {
                    //String start = o.getStartTime();
                    String start = "2018-03-21 12:21:56";
                    // String stop = o.getEndTime()+":0";
                    String stop = "2018-03-21 12:36:00";

                    //txt_timeleft.setText("");
                    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                    //SimpleDateFormat format = new SimpleDateFormat("HH:mm:ss");


                    Calendar start_date = Calendar.getInstance();
                    start_date.setTime(format.parse(start));

                    Calendar end_date = Calendar.getInstance();
                    end_date.setTime(format.parse(stop));

                    final Calendar today = Calendar.getInstance();
                    CountDownTimer timer;

                    long timeDiff = end_date.getTimeInMillis() - start_date.getTimeInMillis();
                    if (timeDiff > 0) {
                        long seconds = timeDiff / 1000 % 60;
                        long minutes = timeDiff / (60 * 1000) % 60;
                        long hours = timeDiff / (60 * 60 * 1000) % 24;
                       // long days = (int) diff / (24 * 60 * 60 * 1000);
                        long days = TimeUnit.MILLISECONDS.toDays(timeDiff);


                        String left = "";
                       if (days > 0)
                           left += days + " " + context.getString(R.string.txt_day) + " ,";
                        if (hours > 0)
                            left += hours + " " + context.getString(R.string.txt_hour) + " :";
                        if (minutes > 0)
                            left += minutes + " " + context.getString(R.string.txt_minute) + ":";

                        left += seconds + " " + context.getString(R.string.txt_second);

                        final String finalLeft = left;
                        DeliveryTime.setText(finalLeft);
                    } else {
                        DeliveryTime.setText("Time Out !!");
                    }
                } catch (Exception ex) {
                    ex.printStackTrace();
                }
          //  }
        }
    }
}

I can not figure out what is the problem exactly...your help is appreciated

SripadRaj
  • 1,687
  • 2
  • 22
  • 33
Madhura
  • 23
  • 1
  • 9

1 Answers1

0

Make use of CountDownTimer(millies,countDownInterval)

new CountDownTimer(TimeUnit.SECONDS.toMinutes(time_in_milli_second, 1000) {

        public void onTick(long millisUntilFinished) {
            long seconds = millisUntilFinished / 1000;
            holder.timeToRespond
                    .setText(String.format("%02d", seconds / 60) + ":" + String.format("%02d", seconds % 60));
        }

        public void onFinish() {
            //do whatever you want after time interval completes.
        }
    }.start();
Archana
  • 597
  • 4
  • 18