¿Es posible actualizar un Adaptador simple? Tengo una lista de datos y un pie de página que dice "Ver próximos resultados". Cuando se hace clic en ese elemento de la lista, captura el evento y obtengo nuevos datos. Luego quiero reemplazar los datos en el ListView con estos nuevos datos, pero no puedo encontrar la manera de hacerlo. ¿Algunas ideas? No quiero usar un ArrayAdapter, porque por lo que puedo ver, los elementos solo pueden contener una cadena donde la necesito para contener varias cadenas y entradas.Cómo actualizar SimpleAdapter en Android
Respuesta
Actualización: Según del116, que de hecho puede dar SimpleAdapter
un mapa mutable y luego llamar manualmente el método del adaptador notifyDataSetChanged
cuando se necesita la lista para actualizar. Sin embargo, mi punto a continuación se refiere a la documentación de SimpleAdapter especificando que es para datos estáticos; usarlo para datos variables va en contra de su diseño, así que si usa esta técnica, me aseguraré de verificar si continúa funcionando en las nuevas versiones de Android a medida que aparecen.
(comentario original sigue :)
Si nos fijamos en la SimpleAdapter description que dice que es "un adaptador fácil de mapear los datos estáticos a las vistas definidas en un archivo XML." He añadido el énfasis: simplemente, SimpleAdapater
no está diseñado para usarse con datos que cambian; maneja solo datos estáticos. Si no puede usar un ArrayAdapter porque sus datos tienen más de un bit de texto, entonces tendrá que crear su propio ListAdapter personalizado, o poner sus datos en un DB y usar uno de los CursorAdapter s.
Como último recurso, si usted no necesita mucho el rendimiento, podría actualizar un ListView
respaldado por una SimpleAdapter
mediante la construcción de una nueva instancia SimpleAdapter
cualquier momento cambios en sus datos y decir la vista de lista para usarla a través setListAdapter
.
SimpleAdapter
es para datos estáticos, por lo que su rendimiento puede variar. La mejor solución es, probablemente, cambiar a un tipo diferente de adaptador, como ArrayAdapter
, o crear un nuevo SimpleAdapter
cada vez que cambie el conjunto de datos.
ListView lv= (ListView) findViewById(R.id.loglist);
ArrayList<Map<String, String>> list = buildData();
String[] from = { "time", "message" };
int[] to = { R.id.logtime, R.id.logmessage };
adapter = new SimpleAdapter(getApplicationContext(), list,R.layout.log_list_row, from,to);
lv.setAdapter(adapter);
Llame esta función cada vez para actualizar el ListView. Tenga en cuenta que usted tiene que actualizar la variable de lista con nuevos datos ..
espero que esta ayuda .. :)
yo no era capaz de conseguir notifyDataSetChanged() para trabajar en la actualización de mi SimpleAdapter, por lo en lugar de eso intentado quitar primero todos los puntos de vista que se adjuntan a la disposición de los padres usando removeAllViews(), a continuación, añadir el ListView, y que trabajaba, permitirme actualizar la interfaz de usuario:
LinearLayout results = (LinearLayout)findViewById(R.id.results);
ListView lv = new ListView(this);
ArrayList<HashMap<String,String>> list = new ArrayList<HashMap<String,String>>();
SimpleAdapter adapter = new SimpleAdapter(this, list, R.layout.directory_row,
new String[] { "name", "dept" }, new int[] { R.id.name, R.id.dept });
for (...) {
HashMap<String, String> map = new HashMap<String, String>();
map.put("name", name);
map.put("dept", dept);
list.add(map);
}
lv.setAdapter(adapter);
results.removeAllViews();
results.addView(lv);
mySimpleAdapter.notifyDataSetChanged();
usar esta línea después de actualizar datos en los datos Lista de HashMap
lea la documentación, no es posible en SimpleAdapter como se indicó anteriormente SimpleAdapter no destinado para tales acciones. – Manny265
- 1. Uso de SimpleAdapter con Spinner
- 2. Elija entre ArrayAdapter y SimpleAdapter
- 3. Mejor comprensión de la ViewBinder de SimpleAdapter
- 4. Actualizar cuadrícula Dyanmically en Android
- 5. ¿Cómo puedo actualizar MediaStore en Android?
- 6. Android: Cómo actualizar la lista al eliminar elementos en CustomAdapter personalizado
- 7. Actualizar una vista Android
- 8. Cómo actualizar la versión de Android 2.3.6
- 9. Android - Actualizar un contacto
- 10. Android: ¿cómo actualizar una aplicación de Android con facturación Inapp?
- 11. Actualizar sistema operativo Android programáticamente
- 12. Actualizar Android Widget From Activity
- 13. ¿Cómo actualizar Android ListView con datos dinámicos en tiempo real?
- 14. Android: Cómo actualizar nuevos niveles de API en Eclipse
- 15. ¿Cómo actualizar un TextView mientras se repite en Android?
- 16. Actualizar dinámicamente cuadro de autocompletar en Android?
- 17. Android - ¿Actualizar datos en un AlertDialog?
- 18. ¿Cómo puedo actualizar mi ADT en Eclipse?
- 19. Force Widget de Android para actualizar
- 20. ¿Cómo actualizar en mangosta?
- 21. No se puede actualizar Android SDK Tools
- 22. Actualizar la base de datos Android
- 23. No se puede actualizar Android SDK
- 24. Eclipse dice "Actualizar Android Developer Toolkit"
- 25. Vista de lista de Android actualizar
- 26. Cómo actualizar la base de datos multimedia de Android
- 27. Cómo actualizar el número de contacto usando Android
- 28. Android Internal Storage al actualizar la aplicación
- 29. Android - Listview eliminar elemento y Actualizar
- 30. Cómo actualizar un GridView?
Su respuesta aquí es realmente engañosa. Después de actualizar los datos de la matriz y llamar a notifyDataSetChanged() en mi SimpleAdapter, pude actualizar el simpleAdapter. No es necesario usar ArrayAdapter para llamar a notifyDataSetChanged(). – dell116
@ dell116 Bastante justo. Me referí a esa posibilidad al final de mi respuesta, pero la he promovido a la cima en base a tus comentarios de que de hecho funciona; No lo había probado. Sigo manteniendo que hacer tal cosa merece cierta precaución ya que la documentación de SimpleAdapter establece específicamente que es para datos estáticos. –
Mirando hacia atrás en esto ahora ... wow. No sabía nada sobre programación o el propósito previsto de SimpleAdapter. Si usa un ListView (o cualquier AdapterView) respaldado por una estructura de datos que cambiará, no use SimpleAdapter. Foot.inMouth (verdadero); – dell116