Ver mensagens sem resposta | Ver tópicos ativos Hoje é 19 Jun 2013, 12:06



Responder Tópico  [ 3 Mensagens ] 
 [TUTORIAL] ListView parte 4 
Autor Mensagem
What is Android?
What is Android?

Data de registro: 17 Jul 2011, 21:12
Mensagens: 7
Mensagem [TUTORIAL] ListView parte 4
Olá,

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

O exemplo de hoje será mostrado como podemos efetuar uma busca em um listview (search listview), esse recurso é bem interessante quando você já possui uma coleção de dados carregados em seu list e quer efetuar uma busca em cima desta lista.

Abaixo segue o fonte utilizado todo comentado para facilitar seu aprendizado:

Arquivo consulta.java

package br.com.empresa;
 
import java.util.ArrayList;
 
import android.app.Activity;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;
 
public class consulta extends Activity
{
    private ListView lv;
    private EditText et;
    private String[] lstEstados;
    private ArrayList<String> lstEstados_Encontrados = new ArrayList<string>();
 
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.consulta);
 
        lv = (ListView) findViewById(R.id.lvEstados);
        et = (EditText) findViewById(R.id.etProcurar);
   
        lstEstados = new String[] {"São Paulo", "Rio de Janeiro", "Minas Gerais", "Rio Grande do Sul",
                    "Santa Catarina", "Paraná", "Mato Grosso", "Amazonas"};
   
        //Carrega o listview com todos os itens
        lv.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, lstEstados));
        CarregarEncontrados();
 
        //Adiciona um TextWatcher ao TextView cujos métodos são chamados sempre
        //que este TextView sofra alterações.
        et.addTextChangedListener(new TextWatcher()
        {
            public void afterTextChanged(Editable s)
            {
                // Abstract Method of TextWatcher Interface.
            }
   
            public void beforeTextChanged(CharSequence s, int start, int count, int after)
            {
                // Abstract Method of TextWatcher Interface.
            }
   
            //Evento acionado quando o usuário teclar algo
            //na caixa de texto "Procurar"
            public void onTextChanged(CharSequence s, int start, int before, int count)
            {
                CarregarEncontrados();
     
                //Carrega o listview com os itens encontrados
                lv.setAdapter(new ArrayAdapter<String>(consulta.this, android.R.layout.simple_list_item_1, lstEstados_Encontrados));
            }
        });
   
        lv.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView arg0, View view, int position, long index) {
             Mensagem("Você clicou no estado : " + lstEstados_Encontrados.get(position).toString());
            }
        });
   
    }
 
    public void CarregarEncontrados()
    {
        int textlength = et.getText().length();
 
        //Limpa o array com os estados encontrados
        //para poder efetuar nova busca
        lstEstados_Encontrados.clear();
   
        for (int i = 0; i < lstEstados.length; i++)
        {
            if (textlength <= lstEstados[i].length())
            {
                //Verifica se existe algum item no array original
                //caso encontre é adicionado no array de encontrados
                if(et.getText().toString().equalsIgnoreCase((String)lstEstados[i].subSequence(0, textlength)))
                {
                    lstEstados_Encontrados.add(lstEstados[i]);
                }
            }
        }
    }
 
    private void Mensagem(String msg)
    {
        Toast.makeText (getApplicationContext(), msg, Toast.LENGTH_SHORT).show ();
    }
}
 


Abaixo segue o código fonte do arquivo consulta.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    android:layout_height="fill_parent"
    android:layout_width="fill_parent"
    android:orientation="vertical"
    xmlns:android="http://schemas.android.com/apk/res/android">
   
        <EditText
            android:hint="Procurar"
            android:id="@+id/etProcurar"
            android:layout_height="wrap_content"
            android:layout_width="fill_parent">

        </EditText>
 
        <ListView
            android:id="@+id/lvEstados"
            android:layout_height="wrap_content"
            android:layout_width="fill_parent">

        </ListView>
</LinearLayout>
 


O segredo (se é que tem) deste fonte está no evento onTextChanged que é disparado toda vez que o usuário digita alguma coisa na caixa de texto de busca e com isso efetuamos um loop no array de estados e verificamos se oque o usuário digitou existem em algum dos itens, caso tenha adicionamos no array de "encontrados" e em seguida carreamos nosso adapter com esse array de encontrados.

Como resultado temos as imagens a seguir, mostrando a tela inicial e quando o usuário digitar alguma coisa na caixa de texto:
Imagem

Imagem

Em breve estarei postando mais opções relacionadas a layout e listview.

Acessem o meu blog http://escoladeandroid.blogspot.com que lá vocês encontram mais tutoriais relacionados a ListView.

Obrigado e até mais...

_________________
Circus Puzzle Free - testem, comentem
https://market.android.com/details?id=br.com.escoladeandroid&feature=search_result

Escola de Android
http://escoladeandroid.blogspot.com/


11 Fev 2012, 11:17
Perfil
What is Android?
What is Android?

Data de registro: 13 Fev 2012, 20:30
Mensagens: 6
Mensagem Re: [TUTORIAL] ListView parte 4
Teria como carregar a lista com dados do SQLite?


12 Ago 2012, 22:21
Perfil
Anatomy of an App
Anatomy of an App
Avatar de usuário

Data de registro: 08 Ago 2011, 15:21
Mensagens: 120
Localização: Ponta Grossa - PR / Blumenau - SC
Mensagem Re: [TUTORIAL] ListView parte 4
Bem simples a solução, gostei.

_________________
App: ThinkTwice - https://play.google.com/store/apps/details?id=leitura.silenciosa.main
App: InstantGilGomes - https://play.google.com/store/apps/details?id=br.com.pinguimmaroto.instantgilgomes
Blog Pessoal: Cedulio Cezar - http://blog.ceduliocezar.com.br
Blog: Pedreiros do Software - https://pedreirosdosoftware-pedreiros.rhcloud.com


29 Ago 2012, 09:36
Perfil
Mostrar mensagens anteriores:  Organizar por  
Responder Tópico   [ 3 Mensagens ] 

Quem está online

Usuários vendo este fórum: adelar, ademilson, adolfo, alansousa, alexandrepom, Alexandrercarvalho, alexmarcolongo, alfredo_ej, andreleitao, AT-AT, augustomig, Berbert, bozzano, Bruno, brunogh, Caique, careisjr, Carlos Almeida, Carmizini, cezaraf, Chaves, christian, ciro, Clone Trooper, craudiao, czambroni, dallari, Damiani Oliveira, Daniel Batista, danielbfranco, Darth Maul, Dassi, debal, Demerval, Diego Rufino, dreyer, du_sr, edsonel, EduardoYC, elisa, eluttner, espinhara.net, Felipe, Felipe Marcondes, Flavio, free_w3000, FVB, garretereis, gedoor, Geire Robson Gadelha, Geovanne Duarte, gutodias, HanNiBaLSeTDf, Henrique Ferraz, Heritrix, Idelto, jacard, jacksaum, jacksonvpj, jairodealmeida, Jalerson, jasn, JeffCF, jefficojava, jlucasps, joaquimfoto, jpespindola, Julio Assis, Juninhooooo, jwv, klassmann, kusanaguy, leanderdulac, leeeeooooooo, lfalcao, lkunta, luciocamilo, marceloaragao, marcelochiquinho, marcosrogel, marinho5, Marini, Matheus562, mauriciobreide, mauriciomag, Mayara Trevisol, Mayron Cimardi, mcurtis, mrkensley, msmdark, Mvitor, mvoto, NeruLL, Nice, nivea, o-raposa, onaiggac, Philipe Alves, polonia, Princesa Léia Organa, pumadeejay, Qui-Gon Jinn, Rafael Felix, Rainha Amidala/Padmé, ramonrabello, ramonsiebra, Ranieri, rbenatti, reginaldo, regisjj, renan.fernandes, renata, Ricardo Chikasawa, Roberto, robertofonte, rocha, Rodrigo, romualdo, romulotales, Samuka, sasuke_sarutobi, Synoo [Bot], tchou, Thiago, thosjanas, Tiago Sousa Roch, Transtago, valaszek, washington, Wds, wender, wilsond, woyzeck, Wryel, wylken e 5 visitantes


Você não pode criar novos tópicos neste fórum
Você não pode responder tópicos neste fórum
Você não pode editar suas mensagens neste fórum
Você não pode excluir suas mensagens neste fórum
Você não pode enviar anexos neste fórum

Procurar por:

© 2007 - 2013 Portal Android - Comunidade de Desenvolvedores da Plataforma Android

Estamos no Linkedin    Siga-nos no twitter


Powered by phpBB - Hospedado por Bemobi