Dando sequência a série sobre ListView, esse que é um dos recursos mais importantes do Android, estamos chegando a parte 3.
O exemplo de hoje será uma variação da parte 2, onde será criado um ListView com alguns estados brasileiros com múltipla escolha, a diferença está por conta do layout, que terá fixo no rodapé dois botões, que irão informar ao usuário quais estados foram marcados e quais não foram marcados.
Vamos por logo a mão na massa, abaixo segue o código fonte do arquivo lista3.java:
package br.com.empresa;
import android.app.Activity;
import android.os.Bundle;
import android.util.SparseBooleanArray;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
public class list3 extends Activity {
private String[] lstEstados;
ListView listView;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.lista3);
listView = (ListView) findViewById(R.id.lista3);
//Criar um array de String
lstEstados = new String[] {"São Paulo", "Rio de Janeiro", "Minas Gerais", "Rio Grande do Sul", "Santa Catarina", "Paraná", "Mato Grosso", "Amazonas"};
//Criar um ArrayAdapter do tipo String, que vai fazer aparecer as Strings acima
//em seu ListView do tipo que checked
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_checked, lstEstados);
//Associar o adapter ao listview
listView.setAdapter(adapter);
}
//Este evento foi definido no arquivo de layout xml
public void btnMarcados_click(View view){
String lstrEstadosSelecionados = "";
//Cria um array com os itens selecionados no listview
SparseBooleanArray checked = listView.getCheckedItemPositions();
for (int i = 0; i < checked.size(); i++){
//pega os itens marcados
lstrEstadosSelecionados += lstEstados[checked.keyAt(i)] + ",";
}
Toast.makeText(this, "Estados marcados : " + lstrEstadosSelecionados, Toast.LENGTH_LONG).show();
}
//Este evento foi definido no arquivo de layout xml
public void btnDesmarcados_click(View view){
String lstrEstadosSelecionados = "";
for (int i = 0; i < listView.getCount(); i++){
//pega os itens desmarcados
if (listView.isItemChecked(i) == false){
lstrEstadosSelecionados += lstEstados[i] + ",";
}
}
Toast.makeText(this, "Estados desmarcados : " + lstrEstadosSelecionados, Toast.LENGTH_LONG).show();
}
}
Para esse exemplo será necessário criar um arquivo de layout, até porque estaremos incluindo dois botões nesse layout e eles ficarão fixos no rodapé do layout.
Abaixo segue o código fonte do arquivo lista3.xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
android:layout_height="fill_parent"
android:layout_width="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android">
<ListView
android:choiceMode="multipleChoice"
android:id="@+id/lista3"
android:layout_above="@+id/buttons"
android:layout_alignParentTop="true"
android:layout_height="fill_parent"
android:layout_width="fill_parent"/>
<LinearLayout
android:id="@+id/buttons"
android:layout_alignParentBottom="true"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:orientation="horizontal">
<Button
android:id="@+id/btnMarcados"
android:layout_height="wrap_content"
android:layout_weight="50"
android:layout_width="fill_parent"
android:onClick="btnMarcados_click"
android:text="Marcados"/>
<Button
android:id="@+id/btnDesmarcados"
android:layout_height="wrap_content"
android:layout_weight="50"
android:layout_width="fill_parent"
android:onClick="btnDesmarcados_click"
android:text="Desmarcados"/>
</LinearLayout>
</RelativeLayout>
Para explicação do layout xml acima temos o seguinte:
- Criamos um LinearLayout com 2 botões dentro de um RelativeLayout que contém o ListView
- ListView android:choiceMode="multipleChoice" - Informamos que teremos seleção em nossa lista
- ListView android:layout_alignParentTop="true" - O ListView ficará alinhado no topo de nosso xml
- Button android:onClick="btnMarcados_click" - Dizemos qual função irá receber o evento click do botão
- Button android:layout_weight="50" - Dizemos que o tamanho do botão será de 50% da tela
Como resultado final teremos a seguinte tela:
![]() |
| ListView |
Em breve estarei postando mais opções relacionadas a layout e listview.
Parte 2 : http://escoladeandroid.blogspot.com/2011/11/trabalhando-com-listview-parte-2.html
Parte 4 : http://escoladeandroid.blogspot.com/2011/12/trabalhando-com-listview-parte-4.html
Parte 5 : http://escoladeandroid.blogspot.com/2011/12/trabalhando-com-listview-parte-5.html
Parte 4 : http://escoladeandroid.blogspot.com/2011/12/trabalhando-com-listview-parte-4.html
Parte 5 : http://escoladeandroid.blogspot.com/2011/12/trabalhando-com-listview-parte-5.html
Parte 6 : http://escoladeandroid.blogspot.com/2011/12/android-listview-parte-6.html
Parte 7 : http://escoladeandroid.blogspot.com.br/2012/03/android-listview-parte-7.html
Parte 8 : http://escoladeandroid.blogspot.com.br/2012/03/android-listview-parte-8.html
Trabalhando com Banco de Dados SQLite:
http://escoladeandroid.blogspot.com/2012/02/android-criando-uma-agenda-de-contatos.html
Desenvolvi o jogo Circus Puzzle Free ele é um quebra-cabeça e está publicado no Android Market, agradeço a todos que baixarem, jogarem e comentarem.
Parte 7 : http://escoladeandroid.blogspot.com.br/2012/03/android-listview-parte-7.html
Parte 8 : http://escoladeandroid.blogspot.com.br/2012/03/android-listview-parte-8.html
Trabalhando com Banco de Dados SQLite:
http://escoladeandroid.blogspot.com/2012/02/android-criando-uma-agenda-de-contatos.html
Desenvolvi o jogo Circus Puzzle Free ele é um quebra-cabeça e está publicado no Android Market, agradeço a todos que baixarem, jogarem e comentarem.
Desenv com qualidade!


3 comentários:
Muto bom o tutorial, mas vi um problema ao reproduzir a função de listar os itens selecionados, se eu marco e logo depois desmarco o item parece que fica gravado como marcado, e ao mostrar no Toast ele aparece mesmo estando desmarcado.
pode me ajudar? e se possível pode enviar a sugestão por e-mail (lucastassis2@gmail.com)?
Muito bom esse tutorial cara, bem simples, didático e prático para aprender.
Estou estudando android e estava com uma tremendo problema para criar layouts e seu tutorial veio em excelente hora. Parabéns!
Lucas se você fizer um if checando os valores verdadeiros e depois jogando no seu Toast ai dá certo!
if(checked.valueAt(i) == true){ //seu toast}
Postar um comentário