2011-11-21 53 views
5

Oye uso una vista de lista para mostrar las entradas que se almacenan en una base de datos. También tengo un elemento EditText y un botón que agrega el contenido de EditText a la base de datos. Para obligar a la vista del contenido de bases de datos que utilizo el SimpleCursorAdapter y después de la función poblar:Android ListView update con SimpleCursorAdapter

private void populate() { 
    cursor = dbAdapter.getAllItems(); 
    startManagingCursor(cursor); 

    String[] from = new String[] { DBAdapter.KEY_TASK }; 
    int[] to = new int[] { android.R.id.text1 }; 

    // Now create an array adapter and set it to display using our row 
    cursorAdapter = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_1, cursor, from, to); 
    list.setAdapter(cursorAdapter); 
} 

Si he añadido una nueva entrada, haciendo clic en el botón i desea actualizar la vista de lista, pero esto sólo funciona con la función poblar y no con la función de adaptador común notifyDataSetChanged();. ¿Tengo un error o esta es la forma correcta de actualizar una lista de visitas?

Respuesta

8

¿Has visto this, has probado el método swap cursor o has intentado simplemente llamar al setAdapter() otra vez?

Tuve un problema similar al no poder actualizar mi lista, y lo que hice fue crear un método refreshListView(). Ahora puede invocar esto inicialmente desde su onCreate() Y siempre que un usuario agregue algo a la base de datos. Todo lo que hace es volver a vincular la vista de lista a un cursor. Con todos los métodos de desaprobación (requery()) y problemas con notifyDataSetChanged(), decidí que esta era la forma más fácil.

+0

Solo para mencionar: 'requery()' ya está en desuso. [Documentation] (http://developer.android.com/reference/android/database/Cursor.html#requery()) tiene un registro claro sobre esto. – 87element

+0

Lo sé, no terminé de pronunciar esa frase, reformué:> – Jack

+0

Hola Jack, gracias por tu respuesta, veo que me olvido de decir que el código anterior es mi función 'populate()' lo llamo mi método 'onCreate()' y si hago clic en "Agregar" -Botón. Solo quería saber si esta es una buena solución para llamar a este método en lugar de llamar al método común 'notifyDataSetChanged()' de la clase de adaptador base. –

2

Por favor, consulte este enlace ... funciona como encanto

Update SimpleCursorAdapter while maintaining scroll position in ListView

de vista de lista dinámica de desplazamiento he añadido nuevo elemento de la base de datos .. hice error aquí .. i estaba asignando nuevo adaptador para cada vez para mismo simplecursoradapter. En lugar de crear un nuevo adaptador. sólo tiene que utilizar

adapter.changecursor(newcursorValue); 
adapter.notifydatasetChanged(); 
lsMedicine1.setSelectionFromTop(lsMedicine1.getLastVisiblePosition()-20, 0); 
1

Es necesario llamar antes swapcursor()notifyDataSetChanged() en el adaptador.

Cuestiones relacionadas