Re-index / Refresh un SectionIndexer
¿Hay alguna forma de volver a indexar un SectionIndexer después de agregar nuevos elementos a un ListView?
He encontrado esta solución , pero la superposición es la posición en la esquina superior izquierda después de que SectionIndexer se actualiza.
- ¿Es posible tener siempre fastscroll habilitado en un listview?
- Capturando el evento TextChanged dentro de un ListView en Android
- ¿Cómo puedo saltar a un elemento de una vista de lista en android?
- Android listview desplazamiento a número de listitems
- Elemento de lista con CheckBox no se puede hacer clic
¿Alguien tiene alguna idea?
- "Su contenido debe tener un ListView cuyo atributo id es 'android.R.id.list'" Al cambiar de ListActivity a una vista
- ¿Cómo obtener los dispositivos bluetooth como una lista?
- Añadir imagen de perfil a la vista de lista en el cajón de navegación
- Cómo cambiar el color del texto del elemento de lista simple
- Aplicación de la burbuja de chat de Android en ListView
- Cómo arredondar las esquinas del elemento de lista en la parte superior e inferior de la vista de lista? (No sólo para las partes superior e inferior)
- ¿Cómo crear este tipo de Listview en Android?
- Lista de clasificación de Android en orden alfabético
Una vez que el FastScroller
obtiene sus secciones llamando a SectionIndexer#getSections()
, nunca las vuelve a obtener a menos que habilite / desactive el desplazamiento rápido como se menciona en el enlace que mencionó. Para obtener el valor que se mostrará en la pantalla, FastScroller llama al método toString de la sección.
Una solución potencial es tener un SectionIndexer
personalizado que tenga las siguientes características:
- La matriz de secciones es de longitud fija (longitud máxima del número esperado de secciones, por ejemplo, si las secciones representan el alfabeto inglés será 26)
- Tener un objeto personalizado para representar secciones, en lugar de utilizar cadenas
- Sobrescriba el método
toString
del objeto de sección personalizado para mostrar lo que desea en función de los valores de sección actuales.
–
por ejemplo, en su SectionIndexer personalizado
private int mLastPosition; public int getPositionForSection(int sectionIndex) { if (sectionIndex < 0) sectionIndex = 0; // myCurrentSectionLength is the number of sections you want to have after // re-indexing the items in your ListView // NOTE: myCurrentSectionLength must be less than getSections().length if (sectionIndex >= myCurrentSectionLength) sectionIndex = myCurrentSectionLength - 1; int position = 0; // --- your logic to find the position goes in here // --- eg see the AlphabeticIndexer source in Android repo for an example mLastPosition = position; return mLastPosition; } public Object[] getSections() { // Assume you only have at most 3 section for this example return new MySection[]{new MySection(), new MySection(), new MySection()}; } // inner class within your CustomSectionIndexer public class MySection { MySection() {} public String toString() { // Get the value to displayed based on mLastPosition and the list item within that position return "some value"; } }
Encontré que la mejor manera de hacer esto es llamar a setContentView(R.layout.whatever)
y rellenar el ListView
con su nuevo adaptador / nuevos elementos de datos. Esto volverá a dibujar el ListView
con sus nuevos elementos y la superposición FastScroll aparecerá en el lugar correcto.
He encontrado notifyDataSetInvalidated
trabajando bien, notifyDataSetInvalidated
aquí la idea:
public class MyAdapter extends XXXAdapter implements SectionIndexer { ... public void updateDataAndIndex(List data, Map index) { // update sections // update date set notifyDataSetInvalidated(); } }
actualizar su conjunto de datos e índice (secciones) de alguna manera, y luego notifyDataSetInvalidated
, el índice se actualizará.
Puede forzar la recarga de la lista de secciones a ListView por listView.setAdapter(yourAdapter)
- Pasando la clase anidada <MyInterface <T> como parámetro en Android
- java.lang.ClassCastException: libcore.net.http.HttpURLConnectionImpl no se puede convertir en javax.net.ssl.HttpsURLConnection