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!