Обратный отсчет в программе повторного просмотра показывает мерцающие значения - PullRequest
0 голосов
/ 25 февраля 2019

Я работаю над представлением переработчика, в котором отображаются объекты аукциона.

Каждый объект имеет свое время окончания, и я хочу показать обратный отсчет с текущей даты / времени до даты / времени окончания аукциона.

Используя мою реализацию кода, каждый объект показывает правильное время обратного отсчета, но значения отображаются мерцающими, это не чистое представление.

Я предполагаю, что проблема связана с использованием того же обработчикадля всех объектов.

Это мой текущий код:

@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);








}

Как я могу получить чистый отсчет для каждого объекта?

...