Busca em ListView

Amigos,

Vi no site http://escoladeandroid.blogspot.com.br/2011/12/trabalhando-com-listview-parte-4.html que é possível fazer busca de um determinado item na lista. O exemplo usa dados estáticos, ou seja, via código. Gostaria de saber como fazer isso usando dados do SQLite.

O exemplo abaixo mostra 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:

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 ();
    } 
}

O código xml é esse:

<?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>

Carrego a lista assim:

db.open();
    	Cursor clientes = db.getTodosClientes();
        clientes.moveToFirst();
        SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, android.R.layout.two_line_list_item, clientes, new String[] {DbAdapter.KEY_NOME, DbAdapter.KEY_CELULAR}, new int[] {android.R.id.text1, android.R.id.text2});
		setListAdapter(adapter);

Como fazer isso?

Faça a busca nos ArrayLists de dados.

Como fazer isso, poderia me ajudar?