Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

ViewHolder

Galera, no curso 2 de Android o professor mando o link de uma solução com ViewHolder, eu estou tentando implementar no meu projeto. O problema que estou tendo é que na lista que foi implementado a ViewHolder ela fica atualizando toda a vez que faço algum interação na tela e fica perdendo a informação "Percorrido com Tal Combustível" de alguns itens de forma aleatória e não estou conseguindo achar o erro.

Classe da lista personalizada

class customListConsumo(private val listaConsumo: List<Consumo>, private val activity: Activity): BaseAdapter() {

    override fun getCount(): Int {
        return listaConsumo.size
    }

    override fun getItem(position: Int): Any {
        return listaConsumo[position]
    }

    override fun getItemId(position: Int): Long {
        return listaConsumo[position].idConsumo as Long
    }

    @SuppressLint("SetTextI18n")
    override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {
        val view: View
        val holder: ViewHolderConsumo
        if (convertView == null) {
            view = activity.layoutInflater.inflate(R.layout.lista_consumo_personalizada, parent, false)
            holder = ViewHolderConsumo(view)
            view.tag = holder

        } else{
            view = convertView
            holder = view.tag as ViewHolderConsumo
        }
        val consumo = getItem(position) as Consumo



        val df = DecimalFormat("#.##")
        df.roundingMode = RoundingMode.CEILING

        holder.consumoLitro!!.text = "${df.format(consumo.consumoTotal)}Km/L"

        val converter =  consumo.data!!.split("-")
        val ano = converter[0]
        val mes = converter[1]
        val dia = converter[2]

        holder.data!!.text = "$dia/$mes/$ano"
        holder.combAbastecido!!.text = "Abastecido com ${consumo.combustivel}"


       if (position > 0){
            holder.combPercorrido!!.text = "Percorrido com ${listaConsumo[position - 1].combustivel}"
        } else {
            holder.combPercorrido!!.visibility = View.INVISIBLE
        }

        if (consumo.tanqueCompleto == 1){
            holder.tanqueCheio!!.setImageResource(R.drawable.ic_tanque_cheio)
        } else{
            holder.tanqueCheio!!.setImageResource(R.drawable.ic_tanque_nao_cheio)
        }

        return view
    }
}

ViewHolder

package com.guizaotech.automorama.helpers

import android.view.View
import android.widget.ImageView
import android.widget.TextView
import com.guizaotech.automorama.R

class ViewHolderConsumo(view: View) {
    var consumoLitro: TextView? = null
    var data: TextView? = null
    var combPercorrido: TextView? = null
    var combAbastecido: TextView? = null
    var tanqueCheio: ImageView? = null

    init {
        consumoLitro = view.findViewById(R.id.textConsumoLista)
        data = view.findViewById(R.id.textDataLista)
        combPercorrido = view.findViewById(R.id.textPercorridoLista)
        combAbastecido = view.findViewById(R.id.textAbastecidoLista)
        tanqueCheio = view.findViewById(R.id.imageTanqueCheio)
    }
}
1 resposta
solução!

Resolvi botando o combPercorrido como invisível por padrão, agora ele não confundi o que é para ocultar