domingo, 13 de novembro de 2011

Android - ListView Parte 2

Olá,

Dando sequência a série sobre ListView, esse que é um dos recursos mais importantes do Android, estamos chegando a parte 2.

Hoje vou mostrar como criar um ListView com opção de múltipla escolha, ele será parecido com o primeiro exemplo que eu mostrei no post Parte 1, será criada uma lista de Estados Brasileiros e será identificado dentro do sistema quando você clicar em qualquer um dos Estados e quando sair de sua Activity, o sistema apresentará todos os Estados que você deixou selecionado.

De posse dessa informação cabe a você criar situações reais para esse código.

Abaixo segue o fonte de exemplo:
package br.com.empresa;

import android.app.ListActivity;
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 ListActivity {
    private String[] lstEstados;
    ListView listView;
 
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        // Create an array of Strings, that will be put to our ListActivity
        lstEstados = new String[] {"São Paulo", "Rio de Janeiro", "Minas Gerais", "Rio Grande do Sul",
            "Santa Catarina", "Paraná", "Mato Grosso", "Amazonas"};
  
        //Criar um ArrayAdapter, que vai fazer aparecer as Strings acima
        //em seu ListView do tipo que checked
        this.setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_checked, lstEstados));
  
        //cria o próprio listview
        listView = getListView();
  
        //indica o modo de seleção dos itens, neste caso podemos selecionar quantos itens quisermos
        listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
    }

    @Override
    protected void onListItemClick(ListView l, View v, int position, long id) {
        super.onListItemClick(l, v, position, id);

        //Pegar o item clicado
        Object o = this.getListAdapter().getItem(position);
        String lstrEstado = o.toString();
  
        //Apresentar o item clicado
        Toast.makeText(this, "Você clicou no estado : " + lstrEstado, Toast.LENGTH_LONG).show();
    }

    //Evento executado quando finalizar(clicar no botão voltar) a Intent 
    @Override
    protected void onDestroy() {
        // TODO Auto-generated method stub
        super.onDestroy();
        int len = listView.getCount();
        String lstrEstadosSelecionados = "";
  
        //Cria um array com os iten selecionados no listview
        SparseBooleanArray checked = listView.getCheckedItemPositions();
  
        for (int i = 0; i < checked.size(); i++)  {
            //pega os itens selecionados
            lstrEstadosSelecionados += lstEstados[checked.keyAt(i)] + ",";
        }
        Toast.makeText(this, "Você selecionou os estados : " + lstrEstadosSelecionados, Toast.LENGTH_LONG).show();
    } 
}

Agora vamos ver algumas dicas para se ter um melhor entendimento sobre o código:
1.Como no exemplo da Parte 1, nesse também não preciso ainda de um layout em XML.
2.Foi implementado o método onDestroy, ele é executado toda vez que você o comando finish() em seu programa ou clicar no botão voltar de seu aparelho.
3.Utilizamos a classe SparseBolleanArray para criar um array com todos os itens selecionados em seu ListView.

Como resultado temos a seguinte imagem:
ListView



Em breve estarei postando outras opções de ListView, por exemplo, opções de ícones, checkbox e etc.

Parte 1 : http://escoladeandroid.blogspot.com/2011/10/trabalhando-com-listview-parte-1.html
Parte 3 : http://escoladeandroid.blogspot.com/2011/12/trabalhando-com-listview-parte-3.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.


Desenv com qualidade!

2 comentários:

Hélio disse...

ai você deu um toast no nome do estado, mas como pegaria um id?
por exemplo
se tivesse associado 50=> são paulo, ou 33=> bahia. Quando Escolher o estado mostrar o id e não o nome

Toan Rodrigues Le disse...

No meu tem o seguinte problema

eu seleciono por exemplo
[x]Brasil
e de pois desmarco
[ ]Brasil

E quando é executado o onDestroy, o Brasil aparece no Toast.É só comigo isso?