Dieser Code zum Filtern einer Listview funktioniert, aber wenn ich ein Zeichen in der EditText löschen, nicht die anderen itens der Listview zurück, und wenn ich alle caractereses löschen die ListView löschen.Android - Filter ein listview unvollständig
Hier ist meine Aktivität:
EditText inputSearch = (EditText) findViewById(R.id.inputSearch);
inputSearch.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
itensAdapter.getFilter().filter(s.toString());
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void afterTextChanged(Editable s) {
}
});
Hier ist meine Adapter Klasse
public class ListaItensAdapter extends ArrayAdapter<ItemEstoque> implements Filterable {
private Context context;
private List<ItemEstoque> itens = null;
private List<ItemEstoque> itens_exibicao = null;
Filter f;
public ListaItensAdapter(Context context, List<ItemEstoque> itens) {
super(context, 0, itens);
this.itens = itens;
this.itens_exibicao = itens;
this.context = context;
}
@Override
public View getView(int position, View view, ViewGroup parent) {
ItemEstoque item = itens.get(position);
if (view == null)
view = LayoutInflater.from(context).inflate(R.layout.item_list_estoque, null);
TextView textViewNomeProduto = (TextView) view.findViewById(R.id.text_view_nome);
textViewNomeProduto.setText(item.getNomeProduto());
TextView textViewPreco = (TextView) view.findViewById(R.id.text_view_preco);
textViewPreco.setText(Float.toString(item.getValorUnitarioProduto()));
return view;
}
@Override
public Filter getFilter() {
if(f == null) {
f = new filtrando();
}
return f;
}
private class filtrando extends Filter
{
@Override
protected FilterResults performFiltering(CharSequence constraint) {
constraint = constraint.toString().toLowerCase();
FilterResults result = new FilterResults();
if(constraint != null || constraint.toString().length() > 0)
{
ArrayList<ItemEstoque> filteredItems = new ArrayList<ItemEstoque>();
for(int i = 0, l = itens.size(); i < l; i++)
{
ItemEstoque m = itens.get(i);
if(m.getNomeProduto().toLowerCase().contains(constraint.toString())) {
filteredItems.add(m);
}
}
result.count = filteredItems.size();
result.values = filteredItems;
}
else
{
synchronized(this)
{
result.values = itens;
result.count = itens.size();
}
}
return result;
}
@SuppressWarnings("unchecked")
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
itens_exibicao = (ArrayList<ItemEstoque>)results.values;
notifyDataSetChanged();
clear();
for(int i = 0, l = itens_exibicao.size(); i < l; i++)
add(itens_exibicao.get(i));
notifyDataSetChanged();
//notifyDataSetInvalidated();
}
}
Ich habe bereits eine Menge von Codes über diese gesehen und ich weiß nicht, was sein könnte ...
Es hat funktioniert! Vielen Dank! –