7. Manipulação de Listas
7.3. Adaptador da Lista de Tarefa
Nesta seção, vamos apresentar a implementação do adaptador (Adapter) para a lista de tarefas, juntamente com a criação do ViewHolder. O ViewHolder é responsável por otimizar o acesso aos elementos de interface de cada item da lista.
Para isso, utilizaremos o layout do item, que foi criado anteriormente, para desenhar cada item da lista de tarefas. Este layout define a aparência de cada item na RecyclerView, como o nome da tarefa e os botões associados.
Além disso, vamos implementar ações específicas para cada item da lista, como reagir ao clique nos botões de cada tarefa. Essas interações serão tratadas com a ajuda das funções do repositório, que são responsáveis pelas operações no banco de dados, como atualizar ou excluir tarefas.
Com essa implementação, a lista de tarefas será não apenas exibida, mas também funcional, permitindo ao usuário interagir de forma intuitiva com as tarefas diretamente na interface.
Código:
package ...
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.CheckBox
import android.widget.ImageButton
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView
class ListaTarefaAdapter(private val tarefas: MutableList<Tarefa>): RecyclerView.Adapter<ListaTarefaAdapter.TarefaViewHolder>() {
class TarefaViewHolder(itemView: View): RecyclerView.ViewHolder(itemView) {
//elementos da UI
val nomeTextView = itemView.findViewById<TextView>(R.id.tarefaTextView)
val condicaoCheckBox = itemView.findViewById<CheckBox>(R.id.tarefaCheckBox)
val editButton = itemView.findViewById<ImageButton>(R.id.editImageButton)
val deleteButton = itemView.findViewById<ImageButton>(R.id.deleteImageButton)
//chave do firebase para o item
var key: String = ""
init {
condicaoCheckBox.setOnCheckedChangeListener { compoundButton, bool ->
Log.d("TODO2024","mudou estado da chave: " + key)
TarefaRepository.updateCondicao(key, bool)
}
editButton.setOnClickListener{
//TODO
}
deleteButton.setOnClickListener{
TarefaRepository.deleteTarefa(key)
}
}
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): TarefaViewHolder {
val view = LayoutInflater.from(parent.context).inflate(R.layout.item_tarefa, parent, false)
return TarefaViewHolder(view)
}
override fun onBindViewHolder(holder: TarefaViewHolder, position: Int) {
val tarefa = tarefas[position]
holder.nomeTextView.text = tarefa.nome
holder.condicaoCheckBox.isChecked = tarefa.condicao
//assign key
holder.key = tarefa.key
}
override fun getItemCount(): Int {
return tarefas.size
}
// Método para atualizar a lista de tarefas
fun updateData(newTarefas: List<Tarefa>) {
tarefas.clear()
tarefas.addAll(newTarefas)
notifyDataSetChanged() // Notifica que os dados foram alterados
}
}