Cómo filtrar ListView a través de EditText

Im que hace un eBook como la aplicación para androide y quiero filtrar el título del libro pero cada vez que usted pone una palabra o una oración en el edittext buscará el contenido de los libros … puede alguien ayudarme con esto …

Pruebe éste, siempre que u escriba el texto en el edittext, la lista mostrará resultado filtrado como he mostrado la materia en imágenes

Inicial:

Inicial

Filtrado:

Filtrado:
Esto es main.xml

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <EditText android:id="@+id/etSearchbox" android:layout_width="fill_parent" android:layout_height="wrap_content" /> <ListView android:id="@+id/lvFirst" android:layout_width="fill_parent" android:layout_height="wrap_content" ></ListView> </LinearLayout> 

Esto es FilterListActivity.java

 package com.filterlist; import android.app.Activity; import android.os.Bundle; import android.text.Editable; import android.text.TextWatcher; import android.widget.ArrayAdapter; import android.widget.EditText; import android.widget.ListView; public class FilterListActivity extends Activity{ EditText etSearchbox; ListView lvFirst; ArrayAdapter<String> adapter1; String[] data = {"mehul joisar","amit mishra","amitabh","Aamir khan","jesica","katrina"}; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); etSearchbox=(EditText)findViewById(R.id.etSearchbox); lvFirst=(ListView)findViewById(R.id.lvFirst); lvFirst.setTextFilterEnabled(true); adapter1 = new ArrayAdapter<String>(FilterListActivity.this, android.R.layout.simple_list_item_1, data); lvFirst.setAdapter(adapter1); etSearchbox.addTextChangedListener(new TextWatcher() { @Override public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) { // TODO Auto-generated method stub FilterListActivity.this.adapter1.getFilter().filter(arg0); } @Override public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) { // TODO Auto-generated method stub } @Override public void afterTextChanged(Editable arg0) { // TODO Auto-generated method stub } }); } } 

Tengo un ejemplo de trabajo, prueba esto:

 filterEditText = (EditText)findViewById(R.id.filter); filterEditText.addTextChangedListener(filterTextWatcher); TextWatcher filterTextWatcher = new TextWatcher() { public void beforeTextChanged(CharSequence s, int start, int count,int after) { } public void onTextChanged(CharSequence s, int start, int before,int count) { adapter.getFilter().filter(s); } @Override public void afterTextChanged(Editable s) { // TODO Auto-generated method stub } }; 

El adaptador debe implements Filterable

  @Override public Filter getFilter() { // Filter filter = null; if(filter == null) filter = new CheeseFilter(); return filter; } 

Y la clase de filtro:

  public class CheeseFilter extends Filter { @Override protected FilterResults performFiltering(CharSequence constraint) { // TODO Auto-generated method stub constraint = constraint.toString().toLowerCase(); FilterResults newFilterResults = new FilterResults(); if (constraint != null && constraint.length() > 0) { ArrayList<String> auxData = new ArrayList<String>(); for (int i = 0; i < data.size(); i++) { if (data.get(i).toLowerCase().contains(constraint)) auxData.add(data.get(i)); } newFilterResults.count = auxData.size(); newFilterResults.values = auxData; } else { newFilterResults.count = data.size(); newFilterResults.values = data; } return newFilterResults; } @Override protected void publishResults(CharSequence constraint, FilterResults results) { ArrayList<String> resultData = new ArrayList<String>(); resultData = (ArrayList<String>) results.values; EfficientAdapter adapter = new EfficientAdapter(context, resultData); list.setAdapter(adapter); // notifyDataSetChanged(); } } 

Puedes consultar esta publicación para más información:

Filtro lista expandible

Filtro ListView

Necesita escribir textChangedlistener (o) TextWatcher para el edittext. Dentro del oyente debe escribir la lógica de búsqueda. Aquí está APIdoc . Aquí hay un ejemplo en textwatcher .

  • Cómo aplicar la animación de diseño de Android sólo a los niños por encima de un cierto índice?
  • cómo agregar varias vistas de imagen en la fila de vista de lista con vista de desplazamiento horizontal
  • Los elementos de listView tienen texto en blanco al utilizar setAdapter en el subproceso de interfaz de usuario
  • Los elementos ListView no se pueden hacer clic. ¿por qué?
  • Función de desplazamiento de listview dentro de la vista de desplazamiento
  • Forzar ListView a no reutilizar vistas (casilla de verificación)
  • Obtener el elemento seleccionado y su posición en RecyclerView
  • Vista de lista de Android Giros de derecha / izquierda como registros de llamadas
  • ¿Cómo puedo configurar onClickListener en ArrayAdapter?
  • Android ListView con elementos que se pueden hacer clic en sus filas provoca problemas de desplazamiento continuo
  • Cuadro de diálogo de alerta personalizado con listview personalizado
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.