Android – RecyclerView

Android – RecyclerView

Nessa lição vamos aprender como fazer uso de uma listagem usando o componente RecyclerView. Este componente é mais poderoso que o ListView. No exemplo abaixo iremos criar uma listagem de livros onde será possivel adicionar novos livros ou remover livros.

1- Crie um projeto novov chamado ExemploRecyclerView.

2- Adicione as dependências abaixo

compile 'com.android.support:appcompat-v7:26.+'
compile 'com.android.support:design:26.+'
compile 'com.android.support:recyclerview-v7:26.+'

3- Adicione um RecyclerView ao arquivo de layout criado

<android.support.v7.widget.RecyclerView
        android:id="@+id/recycler"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

4- Crie a classe Livro que irá representar cada item do seu RecyclerView

public class Livro {
 
    private final String nomeLivro;
    private final String nomeAutor;
    private final String descricao;
    private final Double preco;
 
    public Livro(String nomeLivro, String nomeAutor,
        String descricao, Double preco) {
 
        this.nomeLivro = nomeLivro;
        this.nomeAutor = nomeAutor;
        this.descricao = descricao;
        this.preco = preco;
    }
 
    public String getNomeLivro() {
        return nomeLivro;
    }
 
    public String getNomeAutor() {
        return nomeAutor;
    }
 
    public String getDescricao() {
        return descricao;
    }
 
    public Double getPreco() {
        return preco;
    }
}

5- Crie um arquivo xml chamado item_livro que irá possuir a interface de cada item do RecyclerView

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="100dp"
    android:orientation="vertical">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        >
        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:orientation="vertical"
            >
            <TextView
                android:text="Nome do Livro"
                android:layout_width="wrap_content"
                android:textSize="20dp"
                android:layout_height="wrap_content"
                android:textColor="@color/colorPrimaryDark"
                android:id="@+id/item_livro_nome"/>
            <TextView
                android:text="Autor do livro"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@+id/item_livro_autor"/>
            <TextView
                android:text="Descricao do livro"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@+id/item_livro_desc"/>
            <TextView
                android:text="Preço"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textColor="@color/colorAccent"
                android:id="@+id/item_livro_preco"/>
            <!--apenas uma linha divisoria -->
        </LinearLayout>
        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            >
            <ImageButton
                android:layout_gravity="right"
                android:id="@+id/rem"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/ic_rem"
                android:layout_centerVertical="true"
                android:layout_toLeftOf="@+id/add"
                android:layout_toStartOf="@+id/add" />
            <ImageButton
                android:layout_gravity="right"
                android:id="@+id/add"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/ic_add"
                android:layout_alignTop="@+id/rem"
                android:layout_alignParentRight="true"
                android:layout_alignParentEnd="true" />
        </RelativeLayout>
    </LinearLayout>
    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:orientation="vertical"
        >
        <View
            android:layout_width="wrap_content"
            android:layout_height="1dp"
            android:background="@android:color/darker_gray"/>
    </LinearLayout>
</LinearLayout>

6- Crie um ViewHolder chamada LivroViewHolder que tem como objetivo manter as referências da view. Assim, não é necessário procurar as referências da view quando for apresentar uma nova view para o usuário.

import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.ImageButton;
import android.widget.TextView;

public class LivroViewHolder extends RecyclerView.ViewHolder {
    final TextView nome;
    final TextView descricao;
    final TextView preco;
    final TextView autor;
    final ImageButton moreButton;
    final ImageButton deleteButton;
    public LivroViewHolder(View view) {
        super(view);
        nome = (TextView) view.findViewById(R.id.item_livro_nome);
        descricao = (TextView) view.findViewById(R.id.item_livro_desc);
        autor = (TextView) view.findViewById(R.id.item_livro_autor);
        preco = (TextView) view.findViewById(R.id.item_livro_preco);
        moreButton = (ImageButton) itemView.findViewById(R.id.add);
        deleteButton = (ImageButton) itemView.findViewById(R.id.rem);
    }
}

7- Crie a classe LivroAdapter. Classe responsável por associar a lista de conteúdo/objeto à view correspondente. Onde cada objeto da lista será um item na lista. É no Adapter onde se define se um item será exibido ou não.

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;
import java.util.List;
/**
 * Created by totemarcal on 18/09/18.
 */
class LivroAdapter extends RecyclerView.Adapter {
    private List<Livro> livros;
    private Context context;
    public LivroAdapter(List<Livro> livros, Context context) {
        this.livros = livros;
        this.context = context;
    }
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent,int viewType) {
        View view = LayoutInflater.from(context)
                .inflate(R.layout.item_livro, parent, false);
        LivroViewHolder holder = new LivroViewHolder(view);
        return holder;
    }
    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int position) {
        final LivroViewHolder holder = (LivroViewHolder) viewHolder;
        final int pos = position;
        Livro livro  = livros.get(position) ;
        holder.nome.setText(livro.getNomeLivro());
        holder.autor.setText(livro.getNomeAutor());
        holder.descricao.setText(livro.getDescricao());
        holder.preco.setText(Double.toString(livro.getPreco()));
        holder.moreButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                updateItem(pos);
            }
        });
        holder.deleteButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                removerItem(pos);
            }
        });
        holder.nome.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(v.getContext(), pos + "", Toast.LENGTH_SHORT).show();
            }
        });
    }
    @Override
    public int getItemCount() {
        return livros.size();
    }
    public void updateList(Livro livro) {
        insertItem(livro);
    }
    private void insertItem(Livro livro) {
        livros.add(livro);
        notifyItemInserted(getItemCount());
    }
    private void updateItem(int position) {
        Livro livro = new Livro("Aprenda Andoid em 21 dias","Alguém da Silva", "Ótimo Livro", 40.00);
        updateList(livro);
        notifyItemChanged(position);
    }
    private void removerItem(int position) {
        livros.remove(position);
        notifyItemRemoved(position);
        notifyItemRangeChanged(position, livros.size());
    }
}

8- Implemente a classe da Activity que possui o RecyclerView

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recycler);
        List<Livro> livros = getDados();
        recyclerView.setAdapter(new LivroAdapter(livros, this));
        RecyclerView.LayoutManager layout = new LinearLayoutManager(this,
                LinearLayoutManager.VERTICAL, false);
        recyclerView.setLayoutManager(layout);
    }
    private List getDados(){
        List<Livro> livros = new ArrayList<Livro>();
        Livro livrinho = new Livro("O Jardim das Aflições","Carvalho, Olavo de", "Ótimo Livro", 40.00);
        livros.add(livrinho);
        livrinho = new Livro("1984","Orwell, George", "Ótimo Livro", 28.90);
        livros.add(livrinho);
        livrinho = new Livro("Admirável Mundo Novo","Orwell, George", "Ótimo Livro", 19.90);
        livros.add(livrinho);
        livrinho = new Livro("O Sol É Para Todos","Lee, Harper", "Ótimo Livro", 19.90);
        livros.add(livrinho);
        livrinho = new Livro("Como Ler Livros","Huxley, Aldous", "Ótimo Livro", 50.00);
        livros.add(livrinho);
        livrinho = new Livro("A Revolução Dos Bichos","Orwell, George", "Ótimo Livro", 19.90);
        livros.add(livrinho);
        return livros;
    }
}

Deixe uma resposta

Specify Google Client ID and Secret in Super Socializer > Social Login section in admin panel for Google Login to work

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *