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