2016-08-03 4 views
0

リストビューにこのコードをフィルタリングするには、働いているが、私はのEditTextの文字を削除すると、リストビューの他のitensを返さない、そしてときに私はすべてのcaracteresは、ListViewコントロールをクリーンアップで削除します。ここでアンドロイド - リストビューをフィルタリングするために、不完全な

が私の活動である:ここでは

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) { 
     } 

    }); 

は私のアダプタクラスが

ある
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(); 

    } 
} 

私は既にこの程度のコードをたくさん見てきましたし、私は何ができるか知っている `tを...あなたは以下の所与のコードを1として、この使用した単純なフィルタ方式を実現することができます

答えて

0

...

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(s.toString()); 
     } 

     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, int after) { 
     } 

     @Override 
     public void afterTextChanged(Editable s) { 
     } 

    }); 

は今、あなたのアダプタは、それが働いた

public class ListaItensAdapter extends ArrayAdapter<ItemEstoque> { 
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 = new ArrayList<ItemEstoque>(); 
     this.itens_exibicao.addAll(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; 

} 

public void getfilter(String charText) { 
charText = charText.toLowerCase(Locale.getDefault()); 
itens.clear(); 
if (charText.length() == 0) { 
itens.addAll(itens_exibicao); 
} 
else 
{ 
for (ItemEstoque m : itens_exibicao) 
{ 
if (m.getNomeProduto().toLowerCase(Locale.getDefault()).contains(charText)) 
{ 
itens.add(m); 
} 
} 
} 
notifyDataSetChanged(); 
} 


} 
+0

.........このようになります!ありがとうございました! –