RecycleView


Vamos agora conhecer o componente RecycleView, o componente RecycleView ele veio para substituir o ListView e o GridView. O RecycleView é mais eficiente e mais flexivel do que o listView e o gridView. Para o funcionamento total do recycleView nos iremos criar uma classe Adapter que vai ser responsavel pelos itens que serão exibidos no nosso recycleView, um gerenciador de layout que definirar o posicionamentos dos nossos itens e um ViewHolder que ajudara na otimização dos nossos itens.

Vamos agora criar um novo projeto, a primeira coisa que vamos fazer ao criar o novo projeto é adicionar a biblioteca do recycleView ao nosso gradle e clicar em SyncNow.

    compile 'com.android.support:recyclerview-v7:25.1.1'

Vamos agora criar uma classe no nosso projeto chamada Pessoa que vai ter 3 atributos(nome, sexo e idade)

Fragment

Um fragment é uma porção da tela que pode ser componetizada para ser utilizada em outras partes da nossa aplicação.

Agora vamos adicionar mais um arquivo de layout no nosso projeto, vamos chamar ele de fragment_pessoa.xml, esse nosso arquivo de layout sera onde nos iremos criar unicamente o nosso RecycleView.

Agora vamos ate a parte do xml do nosso fragment_pessoa.xml e vamos criar o nosso RecycleView

O que podemos perceber de diferente no nosso RecycleView é o atributo android:scrollbars, colocando esse atributos nos estamos definindo que vai aparecer a barra de rolagem no nosso recycleView.

Agora vamos criar uma classe que sera responsavel por esse nosso fragment, vamos chamar ela de PessoaFragment, essa nossa classe sera filha da classe Fragment

Agora vamos realizar as seguintes alterações, vamos criar a instancia do nosso RecycleView e vamos criar uma variavel que vai ser o nosso array de pessoas que vai preencher o nosso recycleview.

A Classe LayoutInflater nesse context serve para transformar o xml do nosso fragment em uma view.

Para ajudar a otimização do nosso recycleView vamos adicionar um metodo como true, esse metodo é o setHasFixedSize. Estamos avisando que o tamanho do recycleView não vai mudar.

Vamos agora adicionar o nosso gerenciador de layout que vai gerenciar como os nossos itens vão ser apresentados no nosso recycleView, vamos utilizar o LinearLayoutManager, ele tem as mesmas propriedade do nosso LinearLayout, nos iremos adicionar a orientation dos nossos itens como vertical a partir da propriedade setOrientation, agora vamos adicionar o nosso Manager ao nosso recycleView.

Agora vamos criar o nosso adapter, que sera responsavel por criar todos os nossos itens do recycleView, vamos chamar o nosso adapter de PessoaAdapter, ele vai ser filho de RecycleView.Adapter<>.

Ele ficara reclamando porque esta faltando implementar alguns metodos, o nosso RecycleView.Adapter<> ele recebe dentro das <> o nosso ViewHolder, que nos iremos criar, o ViewHolder é quem trabalha com o cache de nossa view, vai guardar a view para ser reutilizada.

Vamos agora implementar o nosso ViewHolder, vamos chamar ele de MyViewHolder, essa classe sera filha de RecycleView.ViewHolder. E vamos tambem adicionar ao nosso adapter a nossa classe MyViewHolder que acabamos de criar.

Agora vamos adicionar os metodos que somos obrigados a sobreescrever.

Vamos entender agora o que são esses metodos que acabamos de sobreescrever.

  • getItemCount()
    • Ele é o responsavel por retornar a quantidade de itens que serão exibidos na tela
  • onBindViewHolder
    • Esse é o metodo responsavel por preencher os dados na nossa view que sera exibido pelo nosso RecycleView
  • onCreateViewHolder
    • É onde é carregado o arquivo de layout que representa o item da nossa lista, nesse metodos não preenchemos nenhuma informação da view, apenas criamos as configurações necessarias.

Agora vamos realizar as seguintes alterações no nosso PessoaAdapter.

Vamos adicionar a variavel responsavel que vai receber e preencher os nossos itens do RecycleView, vamos chamar essa variavel de mListPessoas que vai ser do tipo List<Pessoa>, e vamos tambem criar uma variavel do tipo LayoutInflater que vai ser responsavel por capturar o nosso layout inflater de PessoaFragment.

Vamos adicionar um construtor para o nosso adapter, nesse construtor nos iremos preencher a nossa mListPessoas e o receber o nosso LayoutInflater.

Agora vamos criar um layout para o nosso item do recycleView, vamos chamar ele de item_pessoa.xml.

Agora vamos ate o xml do nosso item_pessoa.xml e vamos realizar as seguintes alterações.

Agora vamos voltar ao nosso arquivo PessoaAdapter e vamos realizar as seguintes alterações.

Primeiro vamos realizar a configuração dos componentes do nosso layout item_pessoa na nossa classe MyViewHolder que esta dentro do arquivo PessoaAdapter.

Agora vamos realizar as seguintes alteraçõe.

No metodo onCreateViewHolder nos iremos inflar o nosso item_pessoa.xml e vamos instanciar a nossa MyViewHolder, ou seja, vamos dizer qual vai ser o layout dos nossos itens do recycleView.

No metodo onBindViewHolder vamos preencher os dados da nossa view com os dados do nosso array de Pessoa.

No metodo getItemCount vamos retornar a quantidade de itens que vai ter o nosso recycleView, ou seja, a quantidade de item que existe na lista de pessoa.

Agora vamos voltar ao nosso arquivo MainActivity e vamos criar um metodo que vai retornar uma lista de pessoas.

Agora vamos voltar ao nosso arquivo PessoaFragment e vamos recuperar o metodo que acabamos de criar no MainActivity para preencher o adapter do nosso recycleView.

Vamos agora ao nosso arquivo activity_main.xml e vamos criar um RelativeLayout que vai servir de container para o nosso RecycleView.

Agora vamos voltar ao nosso arquivo MainActivity e vamos criar a chamada do nosso PessoaFragment.

Primeiro nos vamos criar o nosso fragment, para criar o nosso fragment nos iremos utilizar o metodo getSupportFragmentManager().findFragmenteByTag("maintFrag"), atraves do metodo getSupportFragmentManager que retorna um FragmentManager nos podemos criar dinamicamente o nosso fragmente atraves do metodo findFragmentByTag.

Agora iremos verificar se o nosso fragment não foi criado, caso ele não tenha sido criado nos iremos instanciar o nosso fragment, e iremos criar um FragmentTransaction, com essa variavel nos podemos realizar as devidas operações.

  • ft.replace
    • Adiciona o fragmente que criamos manualmente ao nosso relativeLayout que declaramos na activity_main.xml
  • ft.comit
    • Realiza as alterações do nosso FragmentTransaction.

Para implementar o onClick no item do noso RecycleView nos temos que criar uma interface e nessa interface nos iremos criar a assinatura do metodo onClickListener.

Agora vamos implementar essa interface no nosso PessoaFragmente que vai ser onde iremos sobreescrever o metodo onClickListener e aplicar ele no nosso recycleView

Agora nos temos que criar uma variavel do tipo da interface RecycleViewOnClickListenerhack no nosso arquivo PessoaAdapter e vamos adicionar tambem um metodo dentro do PessoaAdapter que vai receber a interface por parametro e preencher a variavel que criamos no nosso PessoaAdapter, vamos tambem criar um metodo que vai excluir o item clicado do nosso recycleView, e temos que implementar o onClickListener na nossa classe MyViewHolder que vai ser a responsavel por realizar o evento do clique do nosso item.

Agora vamos voltar ao nosso arquivo PessoaFragment e vamos realizar as sequintes alterações.

No Nosso arquivo PessoaFragment nos realizamos as seguintes alterações, criamos a variavel adapter como variavel de instancia e chamamos o metodo removeListItem do nosso adapter no onClickListener do nosso PessoaFragment.

Vamos agora executar a nossa app e verificar como ficou o comportamento do nosso recycleView com a ação do click no nosso item.

results matching ""

    No results matching ""