Tudo sobre listas em AndroidPaula Caroline da RosaDesenvolvedora Android
Listas“É uma view group que disponibiliza uma lista de itens escroláveis” (Android developers)
Lista Simples Lista Customizada
AdapterView
Outras AdapterViews• AdapterView é uma view que precisa de um adapter
Listview
GridView
Spinner
Adapter• Adapter é responsável por fazer uma ponte entre um
conjunto de dados a ser mostrado e a Adapter View (listView, gridView, spinner)
• Cada item da lista passa a ser uma pequena view (linha);
• O controle é feito através da posição dos itens da lista;
Criando uma lista simples•Passo 1: O layout
▫Adicionar uma tag ListView dentro de um layout.
Criando uma lista simples•Passo 2: A activity
▫ Encontrar o id que referencia a lista no layout;▫ Criar um adapter, passando os parâmetros context,
layout e items▫ Setar o adapter na lista passando como parâmetro o
adapter criado;
Criando uma lista simples• Prós
▫Fácil de implementar;▫Serve como protótipo;▫Lista estática textos;
• Contras▫Não recicla a view;▫Só aceita textos;
Como uma lista é carregada
ScrollParaCima
Reciclando a view
ViewHolder•Armazena cada componente (view) dentro
de uma tag.
•Previne que o método findViewById seja chamado a cada vez que for utilizado o scroll e a view ficar ativa
•Aumenta performance da lista, permitindo que seja “scrolada” de forma suave
Criando uma lista customizada• Cria-se um layout representando como será
cada linha da lista (custom_layout.xml)• Cria uma tag do tipo ListView dentro do
layout principal (activity_main.xml)• Utiliza o adapter para transformar o conteúdo
de cada linha em uma lista customizada
Criando uma lista customizada•Layout (custom_layout.xml)
Criando uma lista customizada• Adapter – extendendo de BaseAdapter
• Métodos: getCount() – Quantos itens serão representados por este adapter.
getItem(int position) – retorna o dado que está associado com a posição atual
getItemId(int position) – retorna o id da linha associada com a posição específica da lista
getView(int position, View convertView, ViewGroup parent) – retorna a view que corresponde ao dado na posição atual
Criando uma lista customizada• Estende o Adapter da classe BaseAdapter
Criando uma lista customizada•Métodos getcount, getItem e getItemId
Criando uma lista customizada•Implementa o método getView
Criando uma lista customizada•Layout da lista (activity_main.xml)
Criando uma lista customizada• Activity – setando os itens no adapter
(MainActivity.java)
Criando uma lista customizada
Outras formas•Extender a activity de ListActivity
•Utilizando um CursorLoader (dado do banco)
•Utilizando uma Asynctask com ViewHolder
Atualizando a lista•Use o método notifyDataSetChanged() ao
mudar a lista de itens.
Lidando com eventos• Evento de click – implementando a interface
AdapterView.OnItemClickListener
• Evento de usando a classe anônima que implementa a interface
Lidando com eventos•Evento de click longo
RecyclerView• Criada na versão 5.0 do Android (Lollipop)• É um container que exibe dados que podem ser
scrolados de forma eficiente• Faz parte das libs de supporte
RecyclerView
LinearLayoutManager GridLayoutManager StaggeredGridLayoutManager
LayoutManager• Posiciona os itens dentro de uma
RecyclerView
• Determina quando as views deverão ser reaproveitadas
• Pode ser customizado (extendendo RecyclerView.LayoutManager), a fim de melhorias de performance e desempenho
•No arquivo build.gradle, importar as dependências:
•Assim como na ListView, abra uma tag no layout chamando RecyclerView
Layout do item usando cardview• Abra uma tag no layout usando CardView
Criando o adapter• Extenda o adapter de
RecyclerView.Adapter<MeuAdapter.ViewHolder>
• Crie o ViewHolder
Criando o adapter•Implementando o método onCreateViewHolder
▫ Infla-se o layout ▫ Cria-se uma instância da classe ViewHolder passando a
view que foi criada▫ Retorna o ViewHolder com a view já inflada
Criando o adapter•Implementando o método onBindViewHolder
▫ Chamado pelo LayoutManager▫ Substitui o conteúdo da view
• Retornando o tamanho da lista
Criando a activity•Setando adapter na activity
RecyclerView
Lidando com eventos• Sem OnItemClickListener (#mimimi )• Uma forma: seta o clickListener na view (do
construtor do ViewHolder criado)
Outras Vantagens•Otimização de performance;•Encontrar itens visíveis
(LinearLayoutManager)▫findFirstVisibleItemPosition/findLast(...)
•Informar adição/remoção de itens separadamente ▫notifyItemRemoved(pos)/
notifyItemInserted(pos)•ItemDecorator e ItemAnimator •Controle de reciclagem (scrap heap e
recycler pool)
Contato•Twitter: @_paulacr•Blog: http://paulacr.net•E-mail: [email protected]
•Exemplos: ▫ https://github.com/paulacr/CriandoListaSimples▫ https://github.com/paulacr/CriandoListaCustomizada▫ https://github.com/paulacr/CriandoRecyclerView
• Mastering RecyclerView (Dave Smith) - https://www.youtube.com/watch?v=-C5I1DAviJ8