Cree dinámicamente un listview con filas de encabezado para cada mes

Averiguar cómo seccionar un listview es patear mi trasero ahora mismo. He visto el código para sectioned-list-adapter aquí: ListView con desplazamiento / filas de encabezado fijo y esto puede ser en última instancia lo que quiero, pero tal vez hay una mejor manera.

Estos son los requisitos que necesito:

  • Los datos de la vista de lista deben provenir de una base de datos SQLite (consulte el código siguiente para el diseño de la tabla)
  • Los datos deben agruparse por mes (puntos de bonificación por mes / año)
  • La fila de encabezado debe contener el número de elementos registrados en la base de datos para ese mes
  • Debe ser compatible con API 8+
  • Necesito poder chascar un artículo para abrir un diálogo que contiene los movimientos realizados ese día (ya sé hacer esto una vez que puedo conseguir una lista creada)

Mirando el seperatedListAdapter de Jeff Snarkey aquí: http://jsharkey.org/blog/2008/08/18/separating-lists-with-headers-in-android-09/ Conseguí venir con lo siguiente:

datasource = new SmashDataSource(this); datasource.open(); BJJHistory = (ListView) findViewById(R.id.ListHistory); // create our list and custom adapter adapter = new SeparatedListAdapter(this); HistoryBJJ = datasource.getBJJHistory(); // THE DESIRED COLUMNS TO BE BOUND final String[] columns = new String[] { SQLiteHelper.DATE }; // THE XML DEFINED VIEWS WHICH THE DATA WILL BE BOUND TO final int[] to = new int[] { R.id.list_item_title }; if (HistoryBJJ != null) { adapter.addSection("October", new SimpleCursorAdapter(this, R.layout.list_item, HistoryBJJ, columns, to)); } BJJHistory.setAdapter(adapter); 

Esto utiliza el siguiente cursor para extraer datos de la base de datos SQLite en orden descendente:

 public Cursor getBJJHistory() { final String[] columns = { SQLiteHelper.COLUMN_ID, SQLiteHelper.DATE }; final Cursor History; History = database.query(SQLiteHelper.TABLE_BJJ, columns, null, null, null, null, SQLiteHelper.DATE + " DESC"); return History; } 

Esto da como resultado lo siguiente:

Lista de muestra

Esto está bien para empezar, pero me presenta dos problemas:

  • Cómo rellenar dinámicamente el valor "Encabezado" con el mes? He pensado en usar un cursor para llenar una matriz con la lista de meses (después de formatearlos con un SimpleDateFormat), luego haciendo un bucle For Each para ir a través de cada uno, pasando el mes de regreso al método cursor para extraer todas las entradas Con un valor de fecha y hora en ese mes.
  • ¿Cómo mostrar los resultados en una fila como el número de entradas para ese día? Lo ideal sería que me gustaría algo como esto: Daterow

La respuesta para # 2 es algo bastante simple, sólo ponen dos vistas de texto en el diseño de la fila listview, lo que es más complicado es agrupar todas las filas de la base de datos para cada día, o al menos hacer un recuento para cada día y usar ese recuento Para mostrar en la lista.

Para la primera, volviendo al código de ejemplo aquí: http://code.google.com/p/android-section-list/ , en lugar de la matriz de ejemplo proporcionada, creo que podría cambiar lo siguiente:

 SectionListItem[] exampleArray = { // Comment to prevent re-format new SectionListItem("Test 1 - A", "A"), // new SectionListItem("Test 2 - A", "A"), // new SectionListItem("Test 3 - A", "A"), // new SectionListItem("Test 4 - A", "A"), // new SectionListItem("Test 5 - A", "A"), // new SectionListItem("Test 6 - B", "B"), // new SectionListItem("Test 7 - B", "B"), // new SectionListItem("Test 8 - B", "B"), // new SectionListItem("Test 9 - Long", "Long section"), // new SectionListItem("Test 10 - Long", "Long section"), // new SectionListItem("Test 11 - Long", "Long section"), // new SectionListItem("Test 12 - Long", "Long section"), // new SectionListItem("Test 13 - Long", "Long section"), // new SectionListItem("Test 14 - A again", "A"), // new SectionListItem("Test 15 - A again", "A"), // new SectionListItem("Test 16 - A again", "A"), // new SectionListItem("Test 17 - B again", "B"), // new SectionListItem("Test 18 - B again", "B"), // new SectionListItem("Test 19 - B again", "B"), // new SectionListItem("Test 20 - B again", "B"), // new SectionListItem("Test 21 - B again", "B"), // new SectionListItem("Test 22 - B again", "B"), // new SectionListItem("Test 23 - C", "C"), // new SectionListItem("Test 24 - C", "C"), // new SectionListItem("Test 25 - C", "C"), // new SectionListItem("Test 26 - C", "C"), // 

Y reemplazar con los cursores o lo que no es necesario para extraer datos de día, entonces en lugar de "A", "B", "C", reemplazar eso con el nombre del mes.

Esto es bastante confuso para mí como estoy aprendiendo todavía, he conseguido prácticamente cada parte de esta aplicación completa, simplemente no puedo averiguar cómo dividir los datos en una lista

Como referencia, se trata de una captura de pantalla de "CardioTrainer", una aplicación de entrenamiento que tiene una lista seccionada personalizada, pero es básicamente lo que estoy tratando de duplicar, al menos en función.

Captura de pantalla de cardio trainer

La tabla de esto viene de parece esto: tabla de datos

¿Qué te parece si usas https://github.com/commonsguy/cwac-merge en lugar de http://code.google.com/p/android-section-list/ .

Como dudo que tenga un requisito una sección debe pegarse en la parte superior mientras se desplaza.

En segundo lugar, utilizar el adaptador de combinación es simple.

AddView (su vista de sección) addAdapter (su adaptador de sección en particular)

Esto debería ayudarte a ir 🙂

Espero eso ayude.

  • Cómo cambiar el modo de selección ListView de solo a múltiple al hacer clic en evento en android?
  • Métodos de adaptador en Android?
  • cómo agregar una casilla de verificación en un listview?
  • Cómo poner los elementos de la lista en la parte inferior de la vista de lista en el Cajón de navegación como Foursquare
  • Android ListView notifyDataSetChanged () de Service
  • SimpleCursorAdapter con Secciones en Android
  • Creación de un ListView con elementos de lista personalizados mediante programación en Android - no hay ningún elemento de lista de elementos XML
  • Los datos del adaptador RecycleView aparecen erróneos al desplazarse demasiado rápido
  • Configurar RecyclerView para trabajar como chat
  • Eliminar el encabezado de listView
  • Activar onContextMenu cuando la detección de vínculo automático está presente
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.