No desenvolvimento Android, para exibir uma lista vertical com rolagem em nossa tela utilizamos o componente  ListView e uma maneira eficiente de popular os dados neste componente é através do Adapter. Uma manera simples de criar um adapter é usar um ArrayAdapter, pois o adapter converte cada objeto do ArrayList em itens (View) da ListView que iremos popular.

Conforme mostra o diagrama acima, o ArrayAdapter fica entre o ArrayList (fonte de dados) e a ListView (componente de lista) e realiza a configuração de dois aspectos em nossa lista:

  • Quais matriz a lista irá usar como fonte de dados
  • Como converter um determinado item da matriz em um objeto View correspondente

Observe, como mostrado acima, que existem outras fontes de dados além de um ArrayAdapter, como o CursorAdapter, que carrega a ListView a um conjunto de resultados de um banco de dados SQLite local .

Reciclagem e o funcionamento do scroll

Ao usar um adapter e um ListView, precisamos entender como funciona a rolagem dos itens da lista. Este é um conceito que chamamos de reciclagem.

Quando o ListView está conectado a um adapter, este irá instanciar linhas até que o ListView seja totalmente preenchida com itens suficientes para preencher toda a altura da lista. Nesse ponto, não são criados itens de linha adicionais na memória.

Em vez disso, como o deslocamento do usuário através da lista (scroll), os itens que saem da tela são mantidos na memória para utilização posterior e, em seguida, cada nova linha que entra na tela reutiliza uma linha mais velha que se manteve alocada na memória . Desta forma, mesmo para uma lista de 1.000 itens, apenas ~ 7 itens (linhas) serão instanciadas ou retidas na memória. Aqui está uma visão geral de reciclagem:

Abaixo temos mais um diagrama que explica o funcionamento do processo de reciclagem dos itens:

Se interessou?! Acesse este artigo sobre ListView para um outro olhar sobre como esse processo funciona e como otimizar o desempenho de suas listas.

Usando um ArrayAdapter

Para usar um ArrayAdapter, você precisa apenas inicializar o adapter e definí-lo para a ListView.

Primeiro, vamos inicializar o adapter:

// Arrray de dados, que serão exibidos na ListView...
String[] items = {"João da Silva", "Maria Oliveira", "Francisco Aragão"};

// Inicializando o adapter...
ArrayAdapter<String> itemsAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, items);

O ArrayAdapter exige uma declaração do tipo do item a ser convertido para um View (a String neste caso) e, em seguida, aceita três argumentos:

  1. Contexto (instância de Activity – Tela)
  2. Layout de item (Note que nós escolhemos simple_list_item_1.xml que é um simples TextView como o layout para cada um dos itens)
  3. Array de dados (conteúdo dos itens da lista)

Agora, precisamos apenas conectar o adapter na ListView para ela ser populada:

// Instanciando a ListView...
ListView listview = findViewById(R.id.lvItems);

// Definindo o adapter (com os dados) para a ListView...
listView.setAdapter(itemsAdapter);

Por padrão, este comando irá converter cada item do array de dados em uma nova view através do método toString e, em seguida, atribuindo o resultado como o valor de um TextView ( simple_list_item_1.xml, que definimos anteriormente), assim exibindo este conteúdo (texto) como a linha desse item de dados.

Se o aplicativo requer uma tradução mais complexa entre o item e View, como por exemplo exibir o conteúdo de cada linha de uma forma diferente, então temos de criar um ArrayAdapter personalizado. E este é um tema para outro post.

Referência:

Written by Diego Cavalca

Graduado em Análise e Desenvolvimento de Sistemas pela UNILINS em 2012, atualmente Mestrando em Ciência da Computação na Universidade Federal de São Carlos (UFSCar).