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)
}
}