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; } }
- Android Layouts (ViewGroups) – (Parte 2 – RalativeLayout )
- Android SharedPreferences
- Android ListActivity – (Parte 3 – Custom ListView)
- Criando um Projeto Novo
- Android ListActivity – (Parte 1 – ListActivity)