Como criar o seu próprio RecyclerView.Adapter para usar numa aplicação Android?
sobes.tech IA
Resposta da IA
-
Criar uma classe que herde de
RecyclerView.Adapter<ViewHolder>. OndeViewHolderé uma classe interna que herda deRecyclerView.ViewHolder. -
Implementar três métodos abstratos:
onCreateViewHolder(parent: ViewGroup, viewType: Int): Cria uma nova instância deViewHolder. Normalmente aqui ocorre o inflar do layout do elemento da lista.onBindViewHolder(holder: ViewHolder, position: Int): Liga os dados aos elementos doViewHolderpara a posição indicada.getItemCount(): Int: Retorna o número total de elementos no conjunto de dados.
-
Dentro da classe adaptadora, definir uma lista ou outro contêiner para armazenar os dados a serem exibidos.
-
No método
onCreateViewHolder, obterLayoutInflatera partir do contexto deparent, e então chamarinflater.inflate()para criar o elemento View da lista. Passar a View criada ao construtor deViewHolder. -
Dentro da classe interna
ViewHolder, obter referências aos elementos View do layout do elemento da lista, com os quais se precisa trabalhar. Isso é feito no construtor deViewHolder, que recebe a View. -
No método
onBindViewHolder, usarpositionpara obter o elemento de dados correspondente da coleção. Depois, definir os valores das propriedades dos elementos View emholdercom base nos dados desse elemento. -
Adicionar métodos para atualizar os dados no adaptador (por exemplo,
setData(newData: List<Item>)ouaddItem(item: Item)). Após modificar os dados, chamar métodos que informem aoRecyclerViewsobre as mudanças, comonotifyDataSetChanged()ou métodos mais específicos comonotifyItemInserted(),notifyItemRemoved(),notifyItemChanged(),notifyItemRangeChanged().
Exemplo de estrutura:
class MyAdapter(private var dataSet: List<String>) :
RecyclerView.Adapter<MyAdapter.MyViewHolder>() {
class MyViewHolder(view: View) : RecyclerView.ViewHolder(view) {
val textView: TextView
init {
// Definir o listener de clique para a ViewHolder.
textView = view.findViewById(R.id.textView) // ID de exemplo do layout
}
}
override fun onCreateViewHolder(viewGroup: ViewGroup, viewType: Int): MyViewHolder {
val view = LayoutInflater.from(viewGroup.context)
.inflate(R.layout.item_layout, viewGroup, false) // ID de exemplo do layout do elemento
return MyViewHolder(view)
}
override fun onBindViewHolder(viewHolder: MyViewHolder, position: Int) {
viewHolder.textView.text = dataSet[position]
}
override fun getItemCount() = dataSet.size
fun updateData(newData: List<String>) {
dataSet = newData
notifyDataSetChanged() // Ou métodos mais precisos notify*
}
}
- Na atividade ou fragmento onde se usa
RecyclerView, criar uma instância deste adaptador e defini-lo para oRecyclerViewusando o métodosetAdapter(). Também não esquecer de definir umLayoutManagerpara oRecyclerView(por exemplo,LinearLayoutManager).
// Na Activity/Fragment
val recyclerView: RecyclerView = findViewById(R.id.recyclerView) // ID de exemplo
val layoutManager = LinearLayoutManager(this) // Ou outro layout manager
recyclerView.layoutManager = layoutManager
val myAdapter = MyAdapter(initialData)
recyclerView.adapter = myAdapter
// Atualização de dados
myAdapter.updateData(newData)