Como fazer filtro e lista na mesma tela?

0 respostas
ribclauport

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

<?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"
	>
		
		<TextView android:id="@+id/valor"
			android:layout_height="30dip" android:layout_width="130sp"
		/>
		<TextView android:id="@+id/data"
			android:layout_height="30dip" android:layout_width="80sp"
		/>
	</LinearLayout>
</TableRow>

</TableLayout>
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<Receita> receitasList;

	@Override
	public void onCreate(Bundle icicle) {
		super.onCreate(icicle);
		repositorio = new RepositorioContaScript(this);
		try {
			atualizarLista();
			for(int i = 0; i< 2; i++){
			Toast.makeText(CadastroReceita.this, "Clique na Conta para editar, ou abra o menu para outras operações!", 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, "Inserir Novo").setIcon(R.drawable.novo);
		menu.add(0, BUSCAR, 0, "Buscar").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("_id", 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();
	}
}
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<Receita> 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;
	}
}

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?

Criado 24 de maio de 2012
Respostas 0
Participantes 1