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 …
- Actualizaciones de datos de Android ListView ArrayAdapter Mejores prácticas
- Cómo desactivar la selección resaltada en listview xamarin.forms en android
- Cómo crear ListView con la ayuda de remoteview?
- Android ListView cuando los elementos se pueden enfocar, deshabilita los clics
- Error: No se puede resolver notifyDataSetChanged (); Androide
- ¿Cómo configuro una imagen de fondo de ListView vacía?
- JSON a ListView en Android con Gson
- ¿Cómo filtrar el texto de un Android ListView respaldado por un SimpleCursorAdapter?
- Problema de menú emergente en Android ListView
- Implementación de la atracción de Chris Banes para actualizar junto con desplazamiento horizontal en la vista de lista
- Vista anidada de android
- El efecto Ripple no va por encima de ImageView
- Adición dinámica de elementos a la vista de lista mediante el adaptador personalizado para la aplicación de Android
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:
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 implementar animated vector drawables usando la biblioteca de soporte de diseño 23.2?
- Cuando desinstalo mi aplicación, ¿podemos eliminar mi carpeta creada a través de mi aplicación?