Como fazer filtro e lista na mesma tela?

Bom dia pessoal, tenho uma lista em uma tela usando um layout simples, conforme abaixo:

[code]<?xml version=“1.0” encoding=“utf-8”?>
<TableLayout xmlns:android=“http://schemas.android.com/apk/res/android"
android:layout_height=“fill_parent” android:layout_width=“fill_parent"
android:background=”#ffffff”>

<TableRow >
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width=“fill_parent” android:layout_height=“wrap_content”
>

	&lt;TextView android:id="@+id/valor"
		android:layout_height="30dip" android:layout_width="130sp"
	/&gt;
	&lt;TextView android:id="@+id/data"
		android:layout_height="30dip" android:layout_width="80sp"
	/&gt;
&lt;/LinearLayout&gt;

</TableRow>

</TableLayout>[/code]

[code]package br.com.clausoftware;

import java.text.ParseException;
import java.util.List;

import android.app.ListActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ListView;
import android.widget.Toast;
import br.com.clausoftware.banco.BuscarReceita;
import br.com.clausoftware.banco.EditarReceita;
import br.com.clausoftware.banco.Receita;
import br.com.clausoftware.banco.RecetiaListAdapter;
import br.com.clausoftware.banco.RepositorioConta;
import br.com.clausoftware.banco.RepositorioContaScript;

public class CadastroReceita extends ListActivity {

static final int DATE_DIALOG_ID = 0;
protected static final int INSERIR_EDITAR = 1;
protected static final int BUSCAR = 2;

public static RepositorioConta repositorio;

private List&lt;Receita&gt; receitasList;

@Override
public void onCreate(Bundle icicle) {
	super.onCreate(icicle);
	repositorio = new RepositorioContaScript(this);
	try {
		atualizarLista();
		for(int i = 0; i&lt; 2; i++){
		Toast.makeText(CadastroReceita.this, &quot;Clique na Conta para editar, ou abra o menu para outras operações!&quot;, Toast.LENGTH_SHORT).show();
		}
	} catch (ParseException e) {
		e.printStackTrace();
	}
}


protected void atualizarLista() throws ParseException {
	// Pega a lista de contas e exibe na tela
	receitasList = repositorio.listarReceitas();

	// Adaptador de lista customizado para cada linha de um conta
	setListAdapter(new RecetiaListAdapter(this, receitasList));
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
	super.onCreateOptionsMenu(menu);
	menu.add(0, INSERIR_EDITAR, 0, &quot;Inserir Novo&quot;).setIcon(R.drawable.novo);
	menu.add(0, BUSCAR, 0, &quot;Buscar&quot;).setIcon(R.drawable.pesquisar);
	return true;
}

@Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {
	// Clicou no menu
	switch (item.getItemId()) {
	case INSERIR_EDITAR:
		// Abre a tela com o formulário para adicionar
		startActivityForResult(new Intent(this, EditarReceita.class), INSERIR_EDITAR);
		break;
	case BUSCAR:
		// Abre a tela para buscar o conta pelo nome
		startActivity(new Intent(this, BuscarReceita.class));
		break;
	}
	return true;
}

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

// Recupera o id do conta, e abre a tela de edição
protected void editarRececetia(int posicao) {
	// Usuário clicou em algum conta da lista
	// Recupera a conta selecionado
	Receita receita = receitasList.get(posicao);
	// Cria a intent para abrir a tela de editar
	Intent it = new Intent(this, EditarReceita.class);
	// Passa o id do çonta como parâmetro
	it.putExtra(&quot;_id&quot;, receita.getId());
	// Abre a tela de edição
	startActivityForResult(it, INSERIR_EDITAR);
}

@Override
protected void onActivityResult(int codigo, int codigoRetorno, Intent it) {
	super.onActivityResult(codigo, codigoRetorno, it);

	// Quando a activity Editarconta retornar, seja se foi para adicionar vamos atualizar a lista
	if (codigoRetorno == RESULT_OK) {
		// atualiza a lista na tela
		try {
			atualizarLista();
		} catch (ParseException e) {
			e.printStackTrace();
		}
	}
}

@Override
protected void onDestroy() {
	super.onDestroy();

	// Fecha o banco
	repositorio.fechar();
}

}[/code]

[code]package br.com.clausoftware.banco;
import java.util.List;

import br.com.clausoftware.R;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

/**

  • Adapter customizado para exibir contas.
  • @author claudemir

*/
public class RecetiaListAdapter extends BaseAdapter {
private Context context;
private List<Receita> lista;

public RecetiaListAdapter(Context context, List&lt;Receita&gt; lista) {
	this.context = context;
	this.lista = lista;
}

public int getCount() {
	return lista.size();
}

public Object getItem(int position) {
	return lista.get(position);
}

public long getItemId(int position) {
	return position;
}

public View getView(int position, View convertView, ViewGroup parent) {
	// Recupera a Conta da posição atual
	Receita r = lista.get(position);

	LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
	View view = inflater.inflate(R.layout.receita_linha_tabela, null);
	
	

	// Atualiza o valor do TextView
	TextView valor = (TextView) view.findViewById(R.id.valor);
	valor.setText(String.valueOf(r.getValor()));

	TextView data = (TextView) view.findViewById(R.id.data);
	data.setText(r.getData());

	

	return view;
}

}[/code]

Bom, agora eu precisa acrescentar um campo, em que o usuário vai entrar com a data, e então eu vou aplicar um “filtro”, e recarregr a “tela”, qual tecnica eu usaria? tentei colocar um campo fixo, mais da vários erros, eu acho que a abordagem deste adapter não é a indicada, mas não encontrei a
tecnica usada para ter um filtro e lista na mesma tela, alguém poderia me indicar o que uso?