AlphabetIndexer setCursor no actualiza su caché

Estoy tratando de implementar un scroller rápido con AlphabetIndexer, pero cuando el cursor cambia, no está actualizando el chacho de índice. En mi constructor CursorAdapter llamo setCursor(cursor) pero nada cambia, y de acuerdo con la documentación:

Su adaptador es responsable de actualizar el cursor llamando a setCursor (Cursor) si el cursor cambia. Método getPositionForSection (int) hace la búsqueda binaria para el índice inicial de una sección dada (alfabeto).

Pero no pasa nada. Estoy utilizando esto para un filtro de búsqueda, por lo que cuando busco contactos, actualiza la lista con los contactos, por lo que AlphabetIndexer debe trabajar para actualizar el índice de los nuevos elementos de la lista.

Ejemplo: Mi lista completa comienza con contactos que empiezan con 'A' y terminan con contactos que empiezan con 'E'. Así que el AlphabetIndexer tendrá estos índices en su caché.

Pero, vamos a tratar de buscar contactos con 'C', y digamos que tengo 250 contactos que comienza con 'C'. Por lo tanto, tengo que avanzar rápidamente a través de estos contactos, y el índice 'C' debe mostrar, pero en lugar de sólo 'C' que muestra todos los índices, que se mostraron cuando tenía toda la lista.

Aquí está mi constructor CursorAdapter donde llamo setCursor (cursor) para cada letra que escribo:

 public MyCursorAdapter(Context context, Cursor cursor, ArrayList<Integer> ids) { super(context, cursor); try { mAlphaIndexer = new AlphabetIndexer(cursor, cursor.getColumnIndexOrThrow("Name")," ABCDEFGHIJKLMNOPQRSTUVWXYZ"); notifyDataSetChanged(); mAlphaIndexer.setCursor(cursor); this.mSelectedContacts = ids; Log.e("MyCursorAdapter", "construtor: "); } catch(Exception ex) { Log.e("MyCursorAdapter", "Error: " + ex); } finally { mAlphaIndexer.setCursor(cursor); } } 

2 Solutions collect form web for “AlphabetIndexer setCursor no actualiza su caché”

He resuelto esto llamando esto en secuencia después de que fijé el adaptador:

 listView.setFastScrollEnabled(false); listView.setFastScrollEnabled(true); 

Eso funcionó para mí.

Llame a setContentView(R.layout.whatever) y vuelva a llenar el ListView con su nuevo adaptador / nuevos elementos de datos. Esto volverá a dibujar el ListView con sus nuevos elementos y el FastScroll Overlay aparecerá en el lugar correcto.

  • Cuando se utiliza clipToPadding en ListView los elementos se reciclan prematuramente
  • SetOnItemClickListener VS setOnItemSelectedListener en ListView.
  • Listview recarga las imágenes ya cargadas mediante el cargador de imágenes Universal
  • Android: Cómo rellenar un ListView con el indexador de alfabeto y fastscroll como en la aplicación de contactos.
  • Animate listView childs sólo una vez que aparecen
  • Añadir elementos a ListView - Android
  • Ocultar fila de ListView sin ocupar espacio
  • Java.lang.NullPointerException: Intenta invocar el método virtual 'int android.view.View.getImportantForAccessibility ()' en una referencia de objeto nulo
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.