Boa tarde!
Estou desenvolvendo uma aplicação utilizando um searchView. Está funcionando bem a parte de busca, porem se eu apago algum caracter ele nao me devolve a lista anterior.
tenho minha activity:
public class Activity_ListaRota extends ActionBarActivity {
private ListView listViewLinha;
AdapterRota adapterClientes;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity__lista_rota);
listViewLinha = (ListView) findViewById(R.id.listViewLinha);
adapterClientes = new AdapterRota(this, new Banco(this).listaLinha());
listViewLinha.setAdapter(adapterClientes);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu_search, menu);
MenuItem item = menu.findItem(R.id.search);
SearchView searchView = (SearchView) item.getActionView();
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String s) {
return false;
}
@Override
public boolean onQueryTextChange(String s) {
adapterClientes.getFilter().filter(s);
return false;
}
});
return super.onCreateOptionsMenu(menu);
}
}
e meu adapter com metodo getFilter:
public Filter getFilter() {
Filter filter = new Filter() {
@Override
protected FilterResults performFiltering(CharSequence filtro) {
FilterResults results = new FilterResults();
//se não foi realizado nenhum filtro insere todos os itens.
if (filtro == null || filtro.length() == 0) {
results.count = listaTabelaRota.size();
results.values = listaTabelaRota;
return results;
} else {
//cria um array para armazenar os objetos filtrados.
List<Rota> itens_filtrados = new ArrayList<Rota>();
//percorre toda lista verificando se contem a palavra do filtro na descricao do objeto.
for (int i = 0; i < listaTabelaRota.size(); i++) {
Rota data = listaTabelaRota.get(i);
filtro = filtro.toString().toLowerCase();
String condicao = data.getNome().toLowerCase();
if (condicao.contains(filtro)) {
//se conter adiciona na lista de itens filtrados.
itens_filtrados.add(data);
}
}
// Define o resultado do filtro na variavel FilterResults
results.count = itens_filtrados.size();
results.values = itens_filtrados;
}
return results;
}
@SuppressWarnings("unchecked")
@Override
protected void publishResults(CharSequence constraint, Filter.FilterResults results) {
listaTabelaRota = (List<Rota>) results.values;
notifyDataSetChanged(); // Notifica a lista de alteração
}
};
return filter;
}
Segue a execução, apagando o caracter no campo da busca ele nao retorna a lista inicial:
Segue minha lista completa:
Como viram ele deveria retornar a listview com os dados iniciais do adapter, mas simplesmente fica em branco. Tambem se eu realizo uma nova busca ele nao faz nada.
Alguem me da uma luz. Grato desde já!!!