У меня многократный обратный отсчет в RecyclerView. Первоначально он синхронизирован (секунды меняются одновременно), но после прокрутки вверх и вниз в течение некоторого времени CountDown теряет синхронизацию. Изменения в секундах не синхронизированы, а также разница (в миллисекундах) между изменениями первого и второго просмотров. Первоначально разница между 1-й и 2-й датой составляла 10 секунд, после прокрутки пару раз она достигала 20 секунд.
Класс адаптера
public class EventAdapter extends RecyclerView.Adapter<EventAdapter.ViewHolder> {
private LayoutInflater layoutInflater;
private Context context;
private NavController navController;
private ArrayList<Date> datesArray;
public EventAdapter(NavController navController, ArrayList<Date> datesArray) {
this.navController = navController;
this.datesArray = datesArray;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
IntroAdapter.ViewHolder holder = null;
if (layoutInflater == null) {
layoutInflater = LayoutInflater.from(parent.getContext());
}
context = parent.getContext();
EventLayoutBinding binding = DataBindingUtil.inflate(layoutInflater, R.layout.event_layout, parent, false);
return new EventAdapter.ViewHolder(binding);
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
if (holder.timer == null) {
holder.timer = new CountDownTimer(Utils.getDifferenceInMilli(datesArray.get(position)), 1000) {
@Override
public void onTick(long l) {
holder.itemView.tvTime.setText(Utils.getCountDownTime(l, 0));
}
@Override
public void onFinish() {
holder.timer.cancel();
}
}.start();
}
}
@Override
public int getItemCount() {
return datesArray.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
CountDownTimer timer;
EventLayoutBinding itemView;
public ViewHolder(@NonNull EventLayoutBinding itemView) {
super(itemView.getRoot());
this.itemView = itemView;
}
}
}
getDifferenceInMilli()
возвращает разницу в миллисекундах между текущей датой и предоставленной датой.
Есть ли способ сохранить синхронизацию после прокрутки?