ListView - Pesquisa

Boa noite!

Uma outra coisa que pode ser feita com a listagem, é colocar um EditText no layout, para que os itens possam ser achados mais facilmente quando a lista é muito grande.
Para isso, é preciso que o arquivo main.xml seja alterado, ficando desta forma:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
    <EditText
        android:id="@+id/eText"
        android:hint="Pesquisar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true" />
    <ListView
        android:id="@+id/lView"
        android:layout_below="@id/eText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
</RelativeLayout>

Agora, nossa aplicação deixa de extender ListActivity e passa a extender a Activity, conforme abaixo:
package br.com.blogspot.androidandrekunde.listview;

import java.util.ArrayList;

import android.app.Activity;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ListView;

public class MainActivity extends Activity {

    private String[] lstFrutas;
    private ListView lView;
    private EditText eText;
    private ArrayList<String> pesquisa = new ArrayList<String>();

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        // Declarando os objetos do main.xml
        lView = (ListView) findViewById(R.id.lView);
        eText = (EditText) findViewById(R.id.eText);

        lstFrutas = new String[] { "Abacate", "Abacaxi", "Banana", "Carambola",
          "Goiaba", "Jabuticaba", "Laranja", "Maçã", "Melancia", "Morango" };

        lView.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, lstFrutas));

        // Função responsável pela pesquisa
        Pesquisar();

        eText.addTextChangedListener(new TextWatcher() {

            public void afterTextChanged(Editable arg0) {
                // TODO Auto-generated method stub
            }

            public void beforeTextChanged(CharSequence arg0, int arg1,
                    int arg2, int arg3) {
                // TODO Auto-generated method stub
            }

            public void onTextChanged(CharSequence arg0, int arg1, int arg2,
                    int arg3) {
                Pesquisar();

                lView.setAdapter(new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1, pesquisa));
            }
        });
    }

    public void Pesquisar() {
        int textlength = eText.getText().length();
        pesquisa.clear();

        for (int i = 0; i < lstFrutas.length; i++ ) {
            if (textlength <= lstFrutas[i].length()) {
                if (eText.getText().toString().equalsIgnoreCase((String)lstFrutas[i].subSequence(0, textlength))) {
                    pesquisa.add(lstFrutas[i]);
                }
            }
        }
    }
}


Foi adicionado a função Pesquisar(), que é responsável por verificar a lista e retornar somente os valores que coincidirem com o que estiver sendo digitado.
Bom, acho que este post ficou bem comentado no código já.
Tem também a função addTextChangedListener junto com o TextWatcher. É aí que é verificado quando alguma coisa é digitada no EditText, e sempre que isso acontece, é chamada a função de pesquisar que, por sua vez, atualiza a lista sempre que algum caracter for digitado.
E este é o resultado do app acima:



Até o próximo post e qualquer dúvida é só postar aí!
Clique aqui para baixar este projeto.

Sobre o autor

André Luís Batista Kunde
Técnico em Informática (2004), Bacharel em Administração com ênfase em Marketing (2009), buscando ser Engenheiro de Software, Trabalhando com software educacional e me aventurando pelo mundo da programação mobile.

6 comentários:

  1. Olá, belos tutos... tem me ajudado bastante.... mas estou tentando implementar essa busca em um ListView populado com dados do SQLite.... basicamento o método que me retorna td e este.

    public List ConsultarProcurados() {
    List lstAgenda = new ArrayList();
    //Consulta para trazer todos os dados da tabela Agenda ordenados pela coluna Nome
    Cursor cursor = database.query(BaseDAO.TBL_AGENDA, colunas,
    null, null, null, null, BaseDAO.AGENDA_NOME);
    cursor.moveToFirst();
    int textLength = newsFeedActivity.et.length();
    while (!cursor.isAfterLast()) {
    ContatoVO lContatoVO = cursorToContato(cursor);
    lstAgenda.add(lContatoVO);
    cursor.moveToNext();
    }
    cursor.close();
    return lstAgenda;
    }


    Como consultar somente os nomes Iguais ao de um Edittext ? vc pod eme ajudar ?

    ResponderExcluir
    Respostas
    1. Muito obrigado Wesley!!
      Desculpe pela demora, tenho andado meio corrido....

      Olha, ainda não fiz esse tipo de consulta, mas imagino que de para fazer o seguinte, cada vez que o usuário digitar uma letra, o app faz uma consulta no banco, como: "SELECT NOME_CAMPO FROM NOME_TABELA WHERE NOME_CAMPO CONTAINING 'letra'"
      e depois da consulta seria só reiniciar o cursor da lista.
      Não sei se ajudei muito... mas to tentando fazer um exemplo para postar aqui no blog, assim que der um tempo eu posto.

      Excluir
  2. Oláá! Fiz o tutorial mas em vez de aparecer as frutas na tela aparece "Item 1", "Item2" ....
    Gostaria de ajuda!
    Obg

    ResponderExcluir
    Respostas
    1. Boa noite!
      1º você criou a lista conforme o xml?
      2º o ArrayList pesquisa está declarado? Está sendo aplicado no ListView dentro do método onTextChanged?

      Bom, de qualquer forma, estou atualizando a postagem com um link para baixar o projeto... aí você pode rodar aí e comparar melhor com o que você fez!

      Excluir
  3. Como faço para, após uma pesquisa, eu clicar no item da listView(o item que pesquisei) e ele ir pra outra activity?

    Obrigada

    ResponderExcluir
  4. Como faço para, após realizar a pesquisa, eu clicar no item da list View(o item pesquisado) e ele direcionar para outra activity???
    Obrigada

    ResponderExcluir

Copyright © 2013 Aprendendo Android and Blogger Themes.