ListView Search

0

I need to do a search on the data in a listview and make a filter.

I looked for some ways to do this, and what seemed to me simpler was to implement Filterable in the 'adapter' and instantiate its methods. But even following the whole explanation did not work.

Adapter

public class AdapterBDLocal extends BaseAdapter implements Filterable{
private Context mContext;
private CustomFilter filter;
private List<ProdutosPesquisa> produtosList = new ArrayList<>();
private List<ProdutosPesquisa> filterList = new ArrayList<>();


public AdapterBDLocal(Context mContext, List<ProdutosPesquisa> produtosList) {
    this.mContext = mContext;
    this.produtosList = produtosList;
}

@Override
public int getCount() {
    return produtosList.size();
}

@Override
public Object getItem(int i) {
    return produtosList.size();
}

@Override
public long getItemId(int i) {
    return i;
}

@Override
public View getView(final int i, View view, ViewGroup viewGroup) {
    View listItem = view;
    if(listItem == null)
        listItem = LayoutInflater.from(mContext).inflate(R.layout.item_lista_pesquisa,viewGroup,false);

    final ProdutosPesquisa p = produtosList.get(i);

    TextView nome = (TextView) listItem.findViewById(R.id.txt_nome_produto2);
    nome.setText(p.getNome_completo());

    TextView categoria = (TextView) listItem.findViewById(R.id.txt_categoria2);
    categoria.setText(p.getCategoria());

    TextView unidade = (TextView) listItem.findViewById(R.id.txt_unidade2);
    unidade.setText(p.getUnidade());

    Button btn_add = (Button)listItem.findViewById(R.id.btn_add);
    Button btn_rem = (Button)listItem.findViewById(R.id.btn_rem);


    btn_add.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            String m = p.getCodigo_barras();
            if(list.size()<=9){
                list.add(m);
                txt.setText(list.toString());
                Toast.makeText(mContext, "Adiconado", Toast.LENGTH_SHORT).show();
                if(txt.getText()!= null){

                }

            } else{
                Toast.makeText(mContext, "Sua Lista esta grande demais!", Toast.LENGTH_SHORT).show();
            }

        }
    });

    btn_rem.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            String m = p.getCodigo_barras();
            list.remove(m);
            txt.setText(list.toString());
            Toast.makeText(mContext, "Removido da lista!", Toast.LENGTH_SHORT).show();

        }
    });

    return listItem;
}

@Override
public Filter getFilter() {
    // TODO Auto-generated method stub
    if(filter == null)
    {
        filter=new CustomFilter();
    }

    return filter;
}

//INNER CLASS
class CustomFilter extends Filter
{

    @Override
    protected FilterResults performFiltering(CharSequence constraint) {
        // TODO Auto-generated method stub

        FilterResults results=new FilterResults();

        if(constraint != null && constraint.length()>0)
        {
            //CONSTARINT TO UPPER
            constraint=constraint.toString().toUpperCase();

            ArrayList<ProdutosPesquisa> filters=new ArrayList<ProdutosPesquisa>();

            //get specific items
            for(int i=0;i<filterList.size();i++)
            {
                if(filterList.get(i).getNome_completo().toUpperCase().contains(constraint))
                {
                    ProdutosPesquisa p = new ProdutosPesquisa();
                    p.setNome_completo(filterList.get(i).getNome_completo());
                    filters.add(p);
                }
            }

            results.count=filters.size();
            results.values=filters;

        }else
        {
            results.count=filterList.size();
            results.values=filterList;

        }

        return results;
    }

    @Override
    protected void publishResults(CharSequence constraint, FilterResults results) {
        // TODO Auto-generated method stub

        produtosList = (ArrayList<ProdutosPesquisa>) results.values;
        notifyDataSetChanged();
    }

 }

}

Activity

public class PesquisaTesteActivity extends AppCompatActivity {

public static TextView txt;
List<ProdutosPesquisa> lista_produtos;
ListView lv;
AdapterBDLocal adapter;
public static ArrayList list = new ArrayList();
private SearchView searchView;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_pesquisa_teste);

    lv = (ListView)findViewById(R.id.lv2);

    searchView = (SearchView) findViewById(R.id.search);

    searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
        @Override
        public boolean onQueryTextSubmit(String query) {
            return false;
        }

        @Override
        public boolean onQueryTextChange(String newText) {
            adapter.getFilter().filter(newText);
            return false;
        }
    });

    lista_produtos = DataBaseClass.getInstance(getApplicationContext()).getAllProdutos();

    txt = findViewById(R.id.textView);


    adapter = new AdapterBDLocal(PesquisaTesteActivity.this,  lista_produtos);
    lv.setAdapter(adapter);


 }

}
    
asked by anonymous 09.02.2018 / 00:57

0 answers