Por que eu devo ler este artigo:Listas permitem representar, de diferentes formas, conjuntos de dados provenientes de diferentes origens para o usuário. Em complemento, adapters permitem personalizar a forma como este componente é apresentado para o usuário. Este artigo discute o uso listas e adapters no Android. Serão apresentados uma série de cenários onde os dados apresentados em tela serão originados de diferentes fontes de informação. O entendimento deste tema é útil uma vez que listas são componentes muito utilizados em aplicativos Android. Dominar suas variações é uma forma de aumentar as possibilidades de interação com o usuário em sua app.

Listas são uma categoria de componentes sofisticados da plataforma Android. Elas trabalham apresentando um conjunto de dados, muitas vezes formados por Strings (mas nada impede de termos imagens ou até mesmo outros componentes visuais), em listas para o usuário. Estes dados podem ser recuperados de listas estáticas como as definidas em um arquivo xml, ou de forma dinâmica, como o conteúdo originado de um banco de dados.

Estes componentes diferem dos componentes tradicionais (EditText, TextView, Button, etc.) pela forma da apresentação dos dados que são formados por nenhum, um ou vários elementos. Destacam-se nesta categoria os componentes ListView, Spinner e AutoCompleteTextView.

Para exemplificar o uso destes componentes de lista, bem como sua personalização a partir de Adapters, serão desenvolvidos alguns exemplos utilizando o componente ListView. Ao longo do artigo será apresentada a utilização de listas com:

  • Elementos estáticos vindos de um arquivo xml;
  • Elementos estáticos originados de um array de String;
  • Elementos dinâmicos vindos de um banco de dados;
  • Apresentação de uma quantidade diferente de dados na tela;
  • Utilização de campos de entrada nos elementos da lista;
  • Utilização de botões em elementos da lista.

Como primeiro passo devemos criar um projeto chamado UsandoListaAdapters com nome de tela principal activity_principal.xml e código Java com nome ActivityPrincipal.java. Os fontes deste artigo serão desenvolvidos utilizando Android Studio.

O componente ListView

O componente ListView é utilizado para apresentar uma grande quantidade de dados em formato de lista. Semelhante aos componentes de lista de outras plataformas, o ListView permite tratar eventos de cliques e de seleção, mas pode ser utilizado somente para apresentar dados (nesta situação, não é necessário o tratamento de eventos).

Para apresentar algumas das funcionalidades deste componente, vamos criar uma lista com todos os países da copa do mundo de 2014. Ao clicarmos em um dos nomes, mostraremos a posição da seleção no ranking da FIFA em um componente Toast.

Pode-se utilizar duas metodologias para o desenvolvimento deste exemplo:

  • Recuperar os elementos da lista diretamente de um arquivo xml;
  • Montar os elementos da lista em um componente ArrayAdapter a partir de um array de String.

Recuperação dos elementos da lista diretamente de um arquivo xml

Primeiramente vamos alterar o arquivo activity_principal.xml para inserir o componente ListView. Veja seu conteúdo na Listagem 1.

  01.  <ListView xmlns:android="http://schemas.android.com/apk/res/android"
  02.      xmlns:tools="http://schemas.android.com/tools"
  03.      android:id="@+id/lvSelecoesCopa"
  04.      android:layout_width="match_parent"
  05.      android:layout_height="match_parent"
  06.      android:entries="@array/paises_copa" />
Listagem 1. activity_principal.xml – Interface gráfica com o componente ListView

Como o componente ListView é utilizado como o único componente de tela sem dividi-la com outros componentes visuais, costuma-se colocá-lo sem a necessidade de um gerenciador de layout. Isto pode ser observado na Listagem 1, onde na linha 01 já aparece a declaração do ListView e ao seu lado, na linha 02, outras informações referentes ao schema do xml. Porém, se houver a necessidade, o ListView pode ser utilizado em conjunto com outros componentes visuais na mesma tela sem nenhum problema.

É definido que a lista ocupará todo o espaço disponível na horizontal (linha 04) e vertical (linha 05). Temos também a propriedade android:entries (linha 06). Esta informa um array de String criado a partir de um arquivo xml que definirá os valores dos elementos do ListView. Ao codificar esta linha no editor de código, um erro é apresentado e só será corrigido após o array paises_copa ser criado.

Para criar um xml com esse array de String, clique com o botão direito sobre o projeto escolhendo a opção NewXMLValues XML File. Na primeira tela é solicitado o nome do arquivo xml (que pode ser elemento_lista).

No arquivo criado dentro da pasta values do projeto, deve-se editar o xml colocando o conteúdo conforme a Listagem 2.

  01.  <?xml version="1.0" encoding="utf-8"?>
  02.  <resources>
  03.      <string-array name="paises_copa">
  04.          <item >Alemanha</item>
  05.          <item >Argentina</item>
  06.          <item >Holanda</item>
  07.          <item >Colombia</item>
  08.          <item >Belgica</item>
  09.          <item >Uruguai</item>
  10.          <item >Brasil</item>
  11.      </string-array>
  12.  </resources>
Listagem 2. elemento_lista.xml – Elementos utilizados para valorizar o componente ListView

No arquivo xml é possível verificar o nome da estrutura string-array na linha 03, assim como todos os elementos que o compõe (das linhas 04 a 10). A referência a este arquivo que acontece na linha 06 da Listagem 1 obedece a seguinte regra: todo o recurso existente no Android (conteúdo da pasta res) é referenciado via xml pelo caractere arroba (@), na sequência é informada a pasta ou tipo de recurso que neste caso é um array. Por fim, temos o nome do recurso definido como é paises_copa (por isso o android:entries=”@array/paises_copa”).

Feito isso, basta declarar e recuperar o componente ListView na classe Activity para um uso futuro da mesma (conforme apresentado na Listagem 3).

O código desenvolvido possui importação de classes, declaração dos componentes visuais e sua recuperação com o método findViewById() (linha 17).

  01.  import android.app.Activity;
  02.  import android.os.Bundle;
  03.  import android.view.View;
  04.  import android.widget.AdapterView;
  05.  import android.widget.ListView;
  06.  import android.widget.Toast;
  07.  
  08.  public class PrincipalActivity extends Activity {
  09.  
  10.    private ListView lvSelecoesCopa;
  11.  
  12.    @Override
  13.    protected void onCreate(Bundle savedInstanceState) {
  14.          super.onCreate(savedInstanceState);
  15.          setContentView(R.layout.activity_principal);
  16.          
  17.          lvSelecoesCopa = (ListView) findViewById( R.id.lvSelecoesCopa );
  18.          
  19.          lvSelecoesCopa.setOnItemClickListener( new AdapterView.OnItemClickListener() {
  20.  
  21.                 @Override
  22.                 public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
  23.                               long arg3) {
  24.                        tratarOpcoesItem( arg2 );
  25.                        
  26.                 }
  27.          } );
  28.          
  29.    }
  30.  
  31.    protected void tratarOpcoesItem( int posicao ) {
  32.          
  33.          int posFifa = posicao + 1;
  34.          
  35.          Toast.makeText( this, "Posição no Ranking: " + posFifa , Toast.LENGTH_LONG ).show();
  36.          
  37.    }
  38.  
  39.  }
Listagem 3. PrincipalActivity.java – Código para tratamento do componente ListView com recuperação de valores a partir de um arquivo xml

Para registrar um evento de clique, deve-se atentar que o evento que interessa para a lista é o clique sobre um item: setOnItemClickListener() (linha 19). Assim como acontece tradicionalmente para o tratamento de clique de botão, aconselha-se utilizar uma classe interna anônima, que para o tratamento de clique no item é AdapterView.OnItemClickListener. Esta classe requer a codificação do método onItemClick (linha 22). Este método traz uma série de parâmetros, destacando-se o índice do elemento selecionado que no exemplo é apresentado com nome arg2.

Ao selecionar um elemento na lista, o método tratarOpcoesItem() é chamado – linha 24. Este método encontra-se codificado na linha 31 e sua função é recuperar a posição do elemento selecionado na lista, ou seja, seu índice (lembrando que o primeiro ...

Quer ler esse conteúdo completo? Seja um assinante e descubra as vantagens.
  • 473 Cursos
  • 10K Artigos
  • 100 DevCasts
  • 30 Projetos
  • 80 Guias
Tenha acesso completo