Adicionando conteúdo em um ListView dinamicamente
Autor: Adolfo Eloy | Publicado: 2012-04-14T16:32:00-07:00

Atualmente tenho estudado um pouco de Android nas horas vagas, então vou colocar aqui no blog, alguns exemplos criados enquanto estudo.Neste post, será mostrado um exemplo de como carregar um ListView de forma dinâmica. Para a criação deste exemplo precisamos criar apenas um projeto Android simples. Criei meu projeto no eclipse gerando o layout main.xml e para minha Activity principal dei o nome de AcademiaActivity (pois estou criando um projeto simples para academias).O layout do aplicativo pode ser visualizado na imagem abaixo:Abaixo segue o código do layout main.xml&lt;?xml version="1.0" encoding="utf-8"?&gt;&lt;TableLayout    xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="wrap_content"     android:shrinkColumns="1,2"&gt;    &lt;TableRow        android:id="@+id/tableRow1"        android:layout_width="wrap_content"        android:layout_height="wrap_content" &gt;             &lt;TextView         android:id="@+id/labelSerie"         android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:text="@string/serie" /&gt;     &lt;EditText         android:id="@+id/txtSerie"         android:layout_width="wrap_content"         android:layout_height="35dp"         android:ems="5" &gt;         &lt;requestFocus /&gt;     &lt;/EditText&gt;     &lt;Button         android:id="@+id/btAdicionar"         android:layout_width="wrap_content"         android:layout_height="35dp"         android:text="@string/adicionar" /&gt;            &lt;/TableRow&gt;    &lt;ListView         android:id="@+id/listaSeries"        android:smoothScrollbar="true"        android:background="#909BD3"&gt;    &lt;/ListView&gt;    &lt;/TableLayout&gt;E abaixo segue o código da Atividade: AcademiaActivity.javapackage br.com.academia;import java.util.ArrayList;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.ArrayAdapter;import android.widget.Button;import android.widget.EditText;import android.widget.ListView;import android.widget.Toast;public class AcademiaActivity extends Activity { private ArrayList series = new ArrayList();     @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);                // define o layout como o criado em main.xml        setContentView(R.layout.main);                // recuperando a listview declarada em main.xml para poder definir o adapter        ListView listaSeries = (ListView) findViewById(R.id.listaSeries);                // definindo a implementação ArrayAdapter como ListAdapter da ListView        // series é a lista de séries de treino definida como um ArrayList através de uma variável de instância        final ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, series);        listaSeries.setAdapter(adapter);        // adicionando comportamento para o evento click do botão adicionar        Button btAdicionar = (Button) findViewById(R.id.btAdicionar);        btAdicionar.setOnClickListener(new OnClickListener() {   public void onClick(View view) {        // recuperando o texto digitado pelo usuario    EditText txtSerie = (EditText) findViewById(R.id.txtSerie);    String serie = txtSerie.getText().toString();        // caso o texto for preenchido, adiciona na lista e atualiza o adapter    // caso contrario exibe uma mensagem solicitando ao usuário que digite uma série    if (serie.length() > 0) {     txtSerie.setText("");     txtSerie.findFocus();     series.add(serie);     adapter.notifyDataSetChanged();    } else {     Toast.makeText(AcademiaActivity.this, "Digite o nome da série", Toast.LENGTH_SHORT).show();    }   }  });            }}Para criar uma Atividade que exibe apenas uma lista, a maioria dos exemplos indica criar a Atividade como uma classe que estende ListActivity ao invés de Activity pois ListActivity já possui uma ListView definida internamente, e no método onCreate não é necessário nem atribuir a contentView.Como neste exemplo, temos alguns componentes para interagir com o usuário além da lista, acabei seguindo a abordagem acima definindo meu próprio ListView no layout principal.A chave aqui para entender o funcionamento do ListView está em entender o seguinte trecho de código:// definindo a implementação ArrayAdapter como ListAdapter da ListView// series é a lista de séries de treino definida como um ArrayList através de uma variável de instânciafinal ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, series);listaSeries.setAdapter(adapter);O conceito utilizado neste trecho de código é o conceito de Adapter. O Adapter permite fazer um bind entre os dados e a View, ou seja, o ArrayList e o ListView respectivamente.Outra parte do código que é importante frisar aqui, é a atualização da ListView quando um item é adicionado no ArrayList. Esta atualização é realizada através do código abaixo:adapter.notifyDataSetChanged();Bom, este foi apenas um exemplo simples para mais uma vez documentar o que ando estudando. Talvez possa ajudar alguém.