Campo busca em listview

7 respostas
W

Uso uma listview para fazer consulta com nome de clientes , gostaria de colocar um campo para buscar os nomes, como posso fazer isso?

7 Respostas

wagnerfrancisco

Teus dados vem do banco? Tá usando um SimpleCursorAdapter?

Caso afirmativo, você pode refazer a consulta em cada busca. O CursorAdapter tem um método chamado changeCursor. Então, após você refazer a consulta, pode utilizá-lo:

adapter.changeCursor(novoCursor);
W
Sik, vem do banco mas não estou usando SimpleCursorAdapter. Segue código
public class ConSeg extends ListActivity{
	 String [] listaUsuarios;// = new String[10];	
	

	 public void onCreate(Bundle savedInstanceState) {
	        super.onCreate(savedInstanceState);
	        buscaUsuarios();
	 }
	 
	 protected void buscaUsuarios() {
		 int posicao=0;
			String url="http://10.0.2.2/madi/consultarSeg.php";			
			String respostaRetornada = null;
			try {
				respostaRetornada = ConecxaoMysql.executaHttpGet(url);
				String resposta = respostaRetornada.toString();
				
				char separadaror='#';
				int contaUsuarios=0;
				for(int i=0;i<resposta.length();i++)
					if(separadaror == resposta.charAt(i))
						contaUsuarios++;
				
				listaUsuarios = new String[contaUsuarios];
				
				char caracter_lido=resposta.charAt(0);
				String nome="";
				for (int i=0;caracter_lido != '^';i++)
				{
					caracter_lido = resposta.charAt(i);
					if (caracter_lido != '#')
						nome+= (char) caracter_lido;
					else
					{ 
						listaUsuarios[posicao]=""+nome;
						posicao++;
						nome="";
					}
				}
				
			}
			catch(Exception erro)
			{
				Log.i("erro", "erro = "+erro);				
			}
			
	        	       
	        ArrayAdapter<String> aaCursos = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, listaUsuarios);
	        setListAdapter(aaCursos);
	 }

		   public void mensagemExibir(String titulo, String texto)
		   {
				AlertDialog.Builder mensagem = new AlertDialog.Builder(ConSeg.this);
				mensagem.setTitle(titulo);
				mensagem.setMessage(texto);
				mensagem.setNeutralButton("OK",null);
				mensagem.show();
		   }
}
wagnerfrancisco

Nesse caso você pode apenas chamar setTextFilterEnabled(true) no listView e digitar alguma coisa, ele automaticamente filtra.

L
wsm:
Sik, vem do banco mas não estou usando SimpleCursorAdapter. Segue código
public class ConSeg extends ListActivity{
	 String [] listaUsuarios;// = new String[10];	
	

	 public void onCreate(Bundle savedInstanceState) {
	        super.onCreate(savedInstanceState);
	        buscaUsuarios();
	 }
	 
	 protected void buscaUsuarios() {
		 int posicao=0;
			String url="http://10.0.2.2/madi/consultarSeg.php";			
			String respostaRetornada = null;
			try {
				respostaRetornada = ConecxaoMysql.executaHttpGet(url);
				String resposta = respostaRetornada.toString();
				
				char separadaror='#';
				int contaUsuarios=0;
				for(int i=0;i<resposta.length();i++)
					if(separadaror == resposta.charAt(i))
						contaUsuarios++;
				
				listaUsuarios = new String[contaUsuarios];
				
				char caracter_lido=resposta.charAt(0);
				String nome="";
				for (int i=0;caracter_lido != '^';i++)
				{
					caracter_lido = resposta.charAt(i);
					if (caracter_lido != '#')
						nome+= (char) caracter_lido;
					else
					{ 
						listaUsuarios[posicao]=""+nome;
						posicao++;
						nome="";
					}
				}
				
			}
			catch(Exception erro)
			{
				Log.i("erro", "erro = "+erro);				
			}
			
	        	       
	        ArrayAdapter<String> aaCursos = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, listaUsuarios);
	        setListAdapter(aaCursos);
	 }

		   public void mensagemExibir(String titulo, String texto)
		   {
				AlertDialog.Builder mensagem = new AlertDialog.Builder(ConSeg.this);
				mensagem.setTitle(titulo);
				mensagem.setMessage(texto);
				mensagem.setNeutralButton("OK",null);
				mensagem.show();
		   }
}

Cara é muito simples, basta você passar o filtro como parâmetro via querystring pro PHP, a seguinte linha que tá assim;

String url="http://10.0.2.2/madi/consultarSeg.php";

É só você colocar tipo assim;

String url="http://10.0.2.2/madi/consultarSeg.php?filtro="+SUA_VARIAVEL;

Lá no PHP você vai simplesmente pegar o parâmetro pelo método GET tipo;

$_GET["filtro"]

E vai adicionar uma cláusula WHERE no seu SQL lá dentro do PHP, comparando o campo que você quer com o valor do parâmetro que você passou pela URL, simples, dessa forma você não precisa carregar todos os registros da tabela pra depois filtrar, se a sua tabela tiver 1 milhão de registros(ou muito menos do que isso já é necessário), a sua aplicação vai travar se tentar carregar todos os registros pra depois filtrar.
Eu tô precisando de uma ajuda de alguém aqui é pra usar essa mesma metodologia que você tá usando de carregar o listview de um XML só que em uma activity normal pois essa minha activity tem além do listview, um TextView, um EditText e um botão, usando ListActivity não funciona e eu não sei porque já que não sou tão catedrático em Android e não acho informação nenhuma em lugar nenhum.

F

wagnerfrancisco, como que uso esse metodo que vc postou ai com o CursorAdapter? Eu preciso fazer um filtro na listview. O AutoCompleteTextView seria uma boa? Os dados vem do SQLite.

F

Eu uso um BaseAdapter

F

wagnerfrancisco,

Precisava falar com vc, poderia me ajudar?

[email removido]

Criado 27 de novembro de 2012
Ultima resposta 26 de ago. de 2013
Respostas 7
Participantes 4