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
<?xml version="1.0" encoding="utf-8"?>
<TableLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:shrinkColumns="1,2">
<TableRow
android:id="@+id/tableRow1"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
<TextView
android:id="@+id/labelSerie"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/serie" />
<EditText
android:id="@+id/txtSerie"
android:layout_width="wrap_content"
android:layout_height="35dp"
android:ems="5" >
<requestFocus />
</EditText>
<Button
android:id="@+id/btAdicionar"
android:layout_width="wrap_content"
android:layout_height="35dp"
android:text="@string/adicionar" />
</TableRow>
<ListView
android:id="@+id/listaSeries"
android:smoothScrollbar="true"
android:background="#909BD3">
</ListView>
</TableLayout>
E abaixo segue o código da Atividade: AcademiaActivity.java
package 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 ArrayListseries = 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 ArrayAdapteradapter = 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ância
final ArrayAdapteradapter = 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.
Boa tarde Adolfo.
ResponderExcluirApesar de ser um exemplo simples, me ajudou muito. Parabéns pelo post, foi muito bem explicado e o código ficou bem simples.
Parabéns e valeu!!!
era exatamente o que eu qeria essa ultima linha me ajudou bastante. meu tcc agradece :)
ResponderExcluirPessoa, desculpe pela ignorância, mais não consegui fazer funcionar, quando clico na minha listview ele abre uma nova acitivity onde posso modificar e ou excluir, minha duvida é ai finalizar esta atividade eu fecho esta activity e volto para a Listview mais ela não e atualizada, como fazer e ou onde colocar : adapter.notifyDataSetChanged();
ResponderExcluirObrigado.
Parabéns pelo post, simples e objetivo!
ResponderExcluir