ListView de filtros de búsqueda de Android

He implementado Filtro de búsqueda a mi SearchView en mi barra de SherlockAction.

Cuando escribo mi queremos mostrar resultados filtrados en la vista de lista debajo de la cual sólo empieza con M y así sucesivamente. Pero ahora muestra resultados aleatorios.

Introduzca aquí la descripción de la imagenIntroduzca aquí la descripción de la imagen

public boolean onQueryTextChange(String newText) { Log.i("Nomad", "onQueryTextChange"); if (TextUtils.isEmpty(newText)) { adapter.getFilter().filter(""); Log.i("Nomad", "onQueryTextChange Empty String"); placesListView.clearTextFilter(); } else { Log.i("Nomad", "onQueryTextChange " + newText.toString()); adapter.getFilter().filter(newText.toString()); } return true; } public boolean onQueryTextSubmit(String query) { Log.i("Nomad", "onQueryTextSubmit"); return false; } public boolean onClose() { Log.i("Nomad", "onClose"); return false; } 

Coloque esto dentro de su adaptador:

 @Override public Filter getFilter(){ return new Filter(){ @Override protected FilterResults performFiltering(CharSequence constraint) { constraint = constraint.toString().toLowerCase(); FilterResults result = new FilterResults(); if (constraint != null && constraint.toString().length() > 0) { List<String> founded = new ArrayList<String>(); for(YourListItemType item: origData){ if(item.toString().toLowerCase().contains(constraint)){ founded.add(item); } } result.values = founded; result.count = founded.size(); }else { result.values = origData; result.count = origData.size(); } return result; } @Override protected void publishResults(CharSequence constraint, FilterResults results) { clear(); for (String item : (List<String>) results.values) { add(item); } notifyDataSetChanged(); } } } 

Y este constructor interior de su adaptador

 public MyAdapter(Context context, int layoutResourceId, String[] places) { super(context, layoutResourceId, data); this.context = context; this.data = Arrays.asList(places); this.origData = new ArrayList<String>(this.data); } 

Obtener el filtro del adaptador y filtrar vy la cadena cambiada en el campo seachview en la consulta cambiada.

 searchView.setOnQueryTextListener(new OnQueryTextListener() { @Override public boolean onQueryTextSubmit(String query) { return false; } @Override public boolean onQueryTextChange(String newText) { getListAdapter().getFilter().filter(newText); return true; } }); 

Agregue el elemento en listview_arr y el código de resto está abajo …: –

  listview_arr = new String[listview_array_location.length]; listview_arr = listview_array; setListAdapter(new bsAdapter(this)); et.addTextChangedListener(new TextWatcher() { public void afterTextChanged(Editable s) { // Abstract Method of TextWatcher Interface. } public void beforeTextChanged(CharSequence s, int start, int count, int after) { // Abstract Method of TextWatcher Interface. } public void onTextChanged(CharSequence s,int start, int before, int count) { /*Log.d("count","count==>"+s.length()); if(((s.length()-temp)%4)==0) { Log.d("in if","if in if"+(s.length()-temp)); et.setText(et.getText().toString()+" "); int position = et.getText().toString().length(); Editable etext = et.getText(); Selection.setSelection(etext, position); temp++; }*/ Log.d("count","count==>"+s); textlength = et.getText().length(); array_sort.clear(); for (int i = 0; i < listview_array_location.length; i++) { if (textlength <= listview_array_location[i].length()) { if(et.getText().toString().equalsIgnoreCase((String)listview_array_location[i].subSequence(0,textlength))) { array_sort.add(listview_array[i]); } } } AppendList(array_sort); } }); } public void AppendList(ArrayList<String> str) { listview_arr = new String[str.size()]; listview_arr = str.toArray(listview_arr); setListAdapter(new bsAdapter(this)); } public class bsAdapter extends BaseAdapter { Activity cntx; public bsAdapter(Activity context) { // TODO Auto-generated constructor stub this.cntx=context; } public int getCount() { // TODO Auto-generated method stub return listview_arr.length; } public Object getItem(int position) { // TODO Auto-generated method stub return listview_arr[position]; } public long getItemId(int position) { // TODO Auto-generated method stub return listview_array.length; } public View getView(final int position, View convertView, ViewGroup parent) { View row=null; LayoutInflater inflater=cntx.getLayoutInflater(); row=inflater.inflate(R.layout.search_list_item, null); TextView tv=(TextView)row.findViewById(R.id.title); Button Btn01=(Button)row.findViewById(R.id.Btn01); Button Btn02=(Button)row.findViewById(R.id.Btn02); tv.setText(listview_arr[position]); Btn01.setOnClickListener(new OnClickListener() { public void onClick(View v) { Toast.makeText(SearchUser.this, "Button 1 "+listview_arr[position], Toast.LENGTH_SHORT).show(); int color = PreferenceManager.getDefaultSharedPreferences( SearchUser.this).getInt(COLOR_PREFERENCE_KEY, Color.WHITE); new ColorPickerDialog(SearchUser.this, SearchUser.this, color).show(); } }); Btn02.setOnClickListener(new OnClickListener() { public void onClick(View v) { Toast.makeText(SearchUser.this, "Button 2 "+listview_arr[position], Toast.LENGTH_SHORT).show(); } }); return row; } } 

Usted puede simplemente pasar por este ejemplo . Es muy fácil de integrar en su aplicación

Aquí está la lógica con array y addTextChangedListener para EditText

  • Obtenga de forma fiable la altura de la barra de estado para resolver problemas de navegación translúcida de KitKat
  • El diseño de la vista no se actualiza en el cambio de orientación en android
  • Android: mapa de bits de una vista de gran tamaño
  • Cómo traer una vista al frente sin llamar bringToFront ()?
  • OnMeasure (): wrap_content, ¿cómo puedo saber el tamaño para envolver?
  • View.getId () devolviendo ID incorrecto en OnItemClickListener
  • El niño especificado ya tiene un error de padre en la vista inflado
  • No se puede resolver el símbolo 'NavigationView'
  • Haciendo que un botón sea más fácil de hacer clic
  • Cómo agregar vista de superposición sobre otra vista en android?
  • ¿Cómo mostrar una imagen que es más grande que las dimensiones de la pantalla del teléfono?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.