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:
- GetItemAtPosition () Cómo obtener datos legibles del elemento seleccionado en un ListView
- Adaptador personalizado para la vista de lista
- Cambiar la listaVer el color seleccionado en Android
- ¿Cómo agrego un onclicklistener a un botón dentro de un adaptador listview?
- uiautomator - no puede obtener ListView para desplazarse como validar el texto en cada elemento de la lista. sólo falla cuando golpeo el último elemento en la pantalla
- 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:
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:
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.
La tabla de esto viene de parece esto:
- Android: Cómo crear CursorAdapter desde los datos en un archivo XML
- Android BaseAdapter con Fragmento
- ¿Cómo implementar un titular de vista?
- ¿Cómo puedo ajustar un número exacto de elementos ListView en la pantalla?
- Después de buscar elementos de ListView en Android, siempre abra el primer elemento de ListView (Issue)
- Desactivar desplazamiento de Android y hacer clic para listview
- Resaltando el elemento seleccionado en el listview en android
- Android - Agregar y mostrar elementos a ListView uno a la vez usando un ArrayAdapter
¿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.
- Cuando desarrollo una aplicación para Android, ¿cómo puedo cancelar una AsyncTask en ejecución?
- Nullpointerexception al intentar obtener json array o json object de json string