Я работаю над представлением переработчика, в котором отображаются объекты аукциона.
Каждый объект имеет свое время окончания, и я хочу показать обратный отсчет с текущей даты / времени до даты / времени окончания аукциона.
Используя мою реализацию кода, каждый объект показывает правильное время обратного отсчета, но значения отображаются мерцающими, это не чистое представление.
Я предполагаю, что проблема связана с использованием того же обработчикадля всех объектов.
Это мой текущий код:
@Override
public void onBindViewHolder(final ViewHolder holder, int position) {
holder.txtreferencia.setText(subastas.get(position).getreferencia());
holder.txttitulo.setText(subastas.get(position).gettitulo());
holder.txtdescripcion.setText(subastas.get(position).getdescripcion());
String marca = subastas.get(position).getmarca();
String modelo = subastas.get(position).getmodelo();
String ano = subastas.get(position).getano();
String generacion = subastas.get(position).getgeneracion();
String serie = subastas.get(position).getserie();
String motor = subastas.get(position).getmotor();
String num_pujas = subastas.get(position).getnum_pujas();
String mejor_puja = subastas.get(position).getmejor_puja();
final String termina = subastas.get(position).gettermina();
Log.d("TERMINA","TERMINA>"+termina);
if (mejor_puja == null || mejor_puja.isEmpty() || mejor_puja.equals("null")){
holder.txtmejor_puja.setVisibility(View.GONE);
}
mejor_puja = mejor_puja.replace('.',',');
holder.txtmarca.setText(marca+ " "+modelo+", "+ano+", "+generacion+", "+serie+" "+motor);
holder.txtnum_pujas.setText(num_pujas+" pujas");
holder.txtmejor_puja.setText("Mejor precio: "+mejor_puja+" €");
String url_foto = "https://.../"+ subastas.get(position).getfoto();
Glide.with(context).load(url_foto).into(holder.imageView);
handler = new Handler();
runnable = new Runnable() {
@Override
public void run() {
handler.postDelayed(this, 1000);
try {
SimpleDateFormat dateFormat = new SimpleDateFormat(
"yyyy-MM-dd hh:mm:ss");
// Please here set your event date//YYYY-MM-DD
Date futureDate = dateFormat.parse(termina);
Date currentDate = new Date();
if (!currentDate.after(futureDate)) {
long diff = futureDate.getTime()
- currentDate.getTime();
long days = diff / (24 * 60 * 60 * 1000);
diff -= days * (24 * 60 * 60 * 1000);
Log.d("TERMINA","TERMINA>"+days);
long hours = diff / (60 * 60 * 1000);
diff -= hours * (60 * 60 * 1000);
Log.d("TERMINA","TERMINA>"+hours);
long minutes = diff / (60 * 1000);
Log.d("TERMINA","TERMINA>"+minutes);
diff -= minutes * (60 * 1000);
long seconds = diff / 1000;
Log.d("TERMINA","TERMINA>"+seconds);
String dias = String.valueOf(days);
String minutos = String.valueOf(minutes);
String horas = String.valueOf(hours);
String segundos = String.valueOf(seconds);
Log.d("TERMINA","TERMINA>current:"+currentDate);
Log.d("TERMINA","TERMINA>future:"+futureDate);
holder.txtRestante.setText(dias+"d"+horas+"h"+minutos+"m"+segundos+"s");
} else {
holder.txtRestante.setText("Subasta terminada");
}
} catch (Exception e) {
e.printStackTrace();
}
}
};
handler.postDelayed(runnable, 1 * 1000);
}
Как я могу получить чистый отсчет для каждого объекта?