¿Cómo arreglar el temporizador al desplazarse en RecyclerView en Android?

Cuando desee usarlo Timeren su adaptador, no debería usarlo en onBindViewHolder.
Porque onBindViewHolderllama cada vez que te desplazas por los elementos.
Debes usar Timer en el constructor de tu Adaptador, y cada segundo notifyDataSetChangedtu adaptador.
No se preocupe, esta no es una mala estructura ni una pérdida de memoria . ¡puedes verificar esto en la pestaña de perfil !

class AuctionsTodayAdapter(val context: Context, val model: MutableList<Today>) :
    RecyclerView.Adapter<AuctionsTodayAdapter.MyHolder>() {

    private var newData: Long = 0

    init {
        for (items in model) {
            items.end.let {
                newData = items.end.toLong()
            }
        }
        //set the timer which will refresh the data every 1 second.
        object : CountDownTimer(newData, 1000) {
            override fun onFinish() {
                notifyDataSetChanged()
            }

            override fun onTick(p0: Long) {
                var i = 0
                val dataLength = model.size
                while (i < dataLength) {
                    val item = model[i]
                    item.end -= 1000
                    i++
                }
                notifyDataSetChanged()
            }
        }.start()
    }

    override fun onBindViewHolder(holder: MyHolder, position: Int) {
        var modelUse = model[position]
        //Img
        modelUse.image.let {
            Glide.with(context)
                .load(Constants.MAIN_BASE_URL + it)
                .apply(RequestOptions.diskCacheStrategyOf(DiskCacheStrategy.RESOURCE))
                .into(holder.rowMAIN_img)
        }
        //Timer
        modelUse.end.let {
            if (modelUse.calculateEnd > 0) {
                holder.rowMAIN_timer.text = getDurationBreakdown(modelUse.end.toLong())
            } else {
                holder.rowMain_timer.text = "Finished"
            }
        }
    }

    private fun millToMins(milliSec: Long): String {
        var seconds = (milliSec / 1000).toInt()
        val hours = seconds / (60 * 60)
        val tempMint = seconds - hours * 60 * 60
        val minutes = tempMint / 60
        seconds = tempMint - minutes * 60

        return String.format("%02d", hours) + ":" + String.format(
            "%02d",
            minutes
        ) + ":" + String.format("%02d", seconds)
    }
}

Espero que yo puedo ayudarle.

Respuesta 1

Estoy usando Spring, MySQL e Hibernate devolviendo el valor Fuera de rango ajustado para la columna 'row_id' e intento insertar una fila en mi base de datos pero recibo el siguiente error: Hibernate: ...

EDITAR: ¡RESUELTO! Simplemente olvidé incluir una declaración 'else' debajo de 'else if' que hace una declaración en blanco. Estoy usando Java, y estoy haciendo un juego de Buscaminas. Estoy tratando de abrir todos los vacíos adyacentes ...

He instalado maven 3.6.0 en mi mac usando homebrew. Cuando intento mvn --version en mi terminal, obtengo el Apache Maven 3.6.0 (97c98ec64a1fdfee7767ce5ffb20918da4f719f3; 2018-10-25T05: 41: 47 + 11: 00) ...

He escrito una aplicación web usando Java EE para alterar el contenido de una tabla. Para la autenticación del usuario, estoy usando las credenciales de la base de datos del usuario. Estoy creando la conexión JDBC usando estos ...