Search view in a listview

0

Hello I want to perform a search in a list view that the data is obtained from an Adapter and search the forum and it does not work for me

this is the adapter code

public class Adaptador extends BaseAdapter implements Filterable {
private Context context;
private ArrayList<Entidad> listItems;
List<String> mData;
List<String> mStringFilterList;
ValueFilter valueFilter;

private LayoutInflater inflater;


public Adaptador(Context context, int item, int tvnombre, ArrayList<Entidad> listItems) {
    this.context = context;
    this.listItems = listItems;
}
//Le dira al contador cuantas veces hay que interar
@Override
public int getCount() { return this.listItems.size(); }
//Obtener los item de la coleccion
@Override
public Object getItem(int position) { return this.listItems.get(position); }
@Override
public long getItemId(int position) { return 0; }
//Se muestran los elementos
@SuppressLint("ViewHolder")
@Override
public View getView(int position, View convertView, final ViewGroup parent) {
    final Entidad item = (Entidad) getItem(position);

    convertView = LayoutInflater.from(context).inflate(R.layout.item, null);
    //referenciamos el evento a modificar y se rellena
    ImageView imglogo = (ImageView) convertView.findViewById(R.id.imglogo);
    TextView tvnombre = (TextView) convertView.findViewById(R.id.tvnombre);
    TextView tvinfo = (TextView) convertView.findViewById(R.id.tvinfo);
    TextView tvnum = (TextView) convertView.findViewById(R.id.tvnum);


    imglogo.setImageResource(item.getImglogo());
    tvnombre.setText(item.getNombre());
    tvinfo.setText(item.getinfo());
    tvnum.setText(item.getnum());
    if (inflater == null) {
        inflater = (LayoutInflater) parent.getContext()
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }


    convertView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(context, restdetalle.class);
            intent.putExtra("objetoData", item);
            context.startActivity(intent);
        }

    });

    return convertView;


}


@Override
public Filter getFilter() {
    if (valueFilter == null) {
        valueFilter = new ValueFilter();
    }
    return valueFilter;
}

private class ValueFilter extends Filter {
    @Override
    protected FilterResults performFiltering(CharSequence constraint) {
        FilterResults results = new FilterResults();

        if (constraint != null && constraint.length() > 0) {
            List<String> filterList = new ArrayList<>();
            for (int i = 0; i < mStringFilterList.size(); i++) {
                if ((mStringFilterList.get(i).toUpperCase()).contains(constraint.toString().toUpperCase())) {
                    filterList.add(mStringFilterList.get(i));
                }
            }
            results.count = filterList.size();
            results.values = filterList;
        } else {
            results.count = mStringFilterList.size();
            results.values = mStringFilterList;
        }
        return results;

    }

    @Override
    protected void publishResults(CharSequence constraint, FilterResults results) {
        mData = (List<String>) results.values;
        notifyDataSetChanged();
    }

}

}

Code where listview and search view are displayed

public class Listviewres extends AppCompatActivity

{     private ListView lvlitems;    private Adapter adapter;     // ArrayList arrayentity;     ArrayList arrayentity = new ArrayList < > ();     ArrayAdapter adapter;     private SearchView sv;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_listviewres);


    lvlitems = (ListView) findViewById(R.id.lvlitems);
    arrayentidad = GetArrayItems();
    adaptador= new Adaptador(this, android.R.layout.simple_list_item_1,arrayentidad);
    lvlitems.setAdapter(adaptador);
    sv = (SearchView) findViewById(R.id.searchView1);
    //employeeAdapter=new EmployeeAdapter(MainActivi ty.this, employeeArrayList);
  //  adaptador = new Adaptador(this,  ,arrayentidad);

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

        @Override
        public boolean onQueryTextChange(String newText) {


            adaptador.getFilter().filter(newText);
            adaptador.notifyDataSetChanged();

            return false;
        }

    });



   /* @Override
    public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(adaptador.main, menu);
    return true;*/
    /*buscar.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { }
        @Override
        public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
            //Listviewres.this.adaptador.getFilter().filter(charSequence);
            //YourActivity.this.YourAdapter.getFilter().filter(arg0);
            // Listviewres.this.adapter.getFilter().filter(charSequence);

             //adapter.getFilter().filter(charSequence);
             //adapter.notifyDataSetChanged();
                //lvlitems.getTextFilter();
            lvlitems.setAdapter(adapter );
            adapter.getFilter().filter(charSequence);
            adapter.notifyDataSetChanged();
        }
@Override
public void afterTextChanged(Editable editable) { }

});

* /

    // FUNCION QUE LLAMARA PARA LOS DETALLES
    lvlitems .setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Intent intent = new Intent(Listviewres.this, restdetalle.class);
            intent.putExtra ("objetoData",arrayentidad.get(position));

            startActivity(intent);
    }
    });
            }
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

I hope you can help me, thanks!

    
asked by luis Garcia 25.10.2018 в 07:47
source

0 answers