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