1. Exibir titulares
No ListView, definir titulares de exibição era uma abordagem sugerida para manter referências para exibições. Mas não foi uma compulsão. Embora, ao não fazer isso, o ListView usado mostre dados obsoletos. Outra grande desvantagem de não usar detentores de visualizações pode levar a uma operação pesada de encontrar visualizações por IDs todas as vezes. O que resultou em ListViews atrasados.
Esse problema foi resolvido no RecylerView pelo uso da classe RecyclerView.ViewHolder. Essa é uma das principais diferenças no RecyclerView e no ListView. Ao implementar um RecyclerView, essa classe é usada para definir um objeto ViewHolder que é usado pelo adaptador para vincular o ViewHolder a uma posição. Outro ponto a ser observado aqui é que, ao implementar o adaptador para o RecyclerView, é obrigatório fornecer um ViewHolder. Isso torna a implementação um pouco complexa, mas resolve os problemas enfrentados no ListView.
2. Gerenciador de Layout
Ao falar de ListViews, apenas um tipo de ListView está disponível, ou seja, o ListView vertical. Você não pode implementar um ListView com rolagem horizontal. Eu sei que existem maneiras de implementar um pergaminho horizontal, mas acredite, ele não foi projetado para funcionar dessa maneira.
Mas agora, quando analisamos o Android RecyclerView vs ListView, também temos suporte para coleções horizontais. Na verdade, ele suporta vários tipos de listas. Para oferecer suporte a vários tipos de listas, ele usa a classe RecyclerView.LayoutManager. Isso é algo novo que o ListView não possui. O RecyclerView suporta três tipos de gerenciadores de layout predefinidos:
LinearLayoutManager - Este é o gerenciador de layout mais usado no caso do RecyclerView. Com isso, podemos criar listas de rolagem horizontais e verticais. StaggeredGridLayoutManager - Através desse gerenciador de layout, podemos criar listas escalonadas. Assim como a tela do Pinterest. GridLayoutManager - Esse gerenciador de layout pode ser usado para exibir grades, como qualquer galeria de imagens.
3. Animador de Itens
As animações em uma lista são uma dimensão totalmente nova, com inúmeras possibilidades. Em um ListView, como tal, não há disposições especiais pelas quais se possa animar, adicionar ou excluir itens. Mais tarde, com a evolução do Android, o ViewPropertyAnimator foi sugerido por Chet Haase, do Google, neste tutorial em vídeo para animações no ListView.
Por outro lado, comparando o Android RecyclerView vs ListView, ele possui a classe RecyclerView.ItemAnimator para lidar com animações. Através dessa classe, é possível definir animações personalizadas para eventos de adição, exclusão e movimentação de itens. Também fornece um DefaultItemAnimator, caso você não precise de personalizações.
4. Adaptador
Os adaptadores ListView eram simples de implementar. Eles tinham um método principal getView, onde toda a mágica costumava acontecer. Onde as vistas estavam vinculadas a uma posição. Além disso, eles costumavam ter um método interessante registerDataSetObserver, em que é possível definir um observador diretamente no adaptador. Esse recurso também está presente no RecyclerView, mas a classe RecyclerView.AdapterDataObserver é usada para ele. Mas o ponto a favor do ListView é que ele suporta três implementações padrão de adaptadores:
ArrayAdapter CursorAdapter SimpleCursorAdapter Enquanto o adaptador RecyclerView, possui toda a funcionalidade que os adaptadores ListView tinham, exceto o suporte interno para cursores de banco de dados e ArrayLists. No RecyclerView.Adapter, a partir de agora, precisamos fazer uma implementação customizada para fornecer dados ao adaptador. Assim como um BaseAdapter faz para ListViews. Embora você queira saber mais sobre a implementação do adaptador RecyclerView, consulte o Exemplo do Android RecyclerView.
5. Notificando alterações nos dados
Ao trabalhar com um ListView, se o conjunto de dados for alterado, você deverá chamar o método notifyDataSetChanged do adaptador subjacente para atualizar os dados. Ou defina o método setNotifyOnChange como true, caso deseje chamar o método notifyDataSetChanged automaticamente. Mas em ambos os casos, o resultado é muito pesado na lista. Basicamente, atualiza as visualizações da lista.
Porém, pelo contrário, em um adaptador RecyclerView, se um único item ou um intervalo de itens tiver sido alterado, existem métodos para notificar a alteração adequadamente. Aqueles são notifyItemChanged e notifyItemRangeChanged respectivamente e muitos mais como:
notifyItemInsterted notifyItemMoved notifyItemRangeInsterted notifyItemRangeRemoved E é claro que possui o método original para atualizar a lista inteira, ou seja, notifyDataSetChanged que notifica a adaptação de todo o conjunto de dados alterado.
6. Item Decoração
Para exibir divisores personalizados em um ListView, é possível adicionar facilmente esses parâmetros no XML do ListView:
XHTML android: divider = "@ android: cor / transparente" android: dividerHeight = "5dp" 1 2 android: divider = "@ android: cor / transparente" android: dividerHeight = "5dp" A parte interessante sobre o Android RecyclerView é que, a partir de agora, não mostra um divisor entre os itens por padrão. Embora os caras do Google devam ter deixado isso de lado para personalização, intencionalmente. Mas isso aumenta muito o esforço de um desenvolvedor. Se você deseja adicionar um divisor entre itens, pode ser necessário fazer uma implementação personalizada usando a classe RecyclerView.ItemDecoration.
Ou você pode aplicar um hack usando esse arquivo de amostras oficiais: DividerItemDecoration.java
7. OnItemTouchListener
As listviews costumavam ter uma implementação simples para a detecção de cliques, ou seja, pelo uso da interface AdapterView.OnItemClickListener.
Por outro lado, a interface RecyclerView.OnItemTouchListener é usada para detectar eventos de toque no Android RecyclerView. Isso complica um pouco a implementação, mas dá um controle maior ao desenvolvedor para interceptar eventos de toque. A documentação oficial declara que pode ser útil para manipulações gestuais, pois intercepta um evento de toque antes de ser entregue ao RecyclerView.
RecyclerView
é muito mais rápido e versátil com uma API muito melhor. Coisas como animar a adição ou remoção de itens já estão implementadasRecyclerView
sem que você precise fazer nada. Não há dúvida sobre isso, jogue o seuListView
na lata de lixo, oRecyclerView
está aqui para roubar o show.