La vista de lista no se actualiza después de la actualización de la base de datos y adapter.notifyDataSetChanged ();

Estuve navegando por la red durante 2 días y probé muchas cosas, pero parece que no puedo averiguar qué está mal con esto.

Todavía soy bastante nuevo en el desarrollo de Android, así que probablemente me haya perdido algo obvio.

Tengo una aplicación que está utilizando una base de datos sqllite para almacenar algunos datos y para la finalidad de esta Prueba de concepto que muestra eso en una vista de lista. Puedo agregar elementos a la lista, eliminarlos.

Hasta ahora tan bueno. El problema que tengo es que, en lugar de eliminar, actualizo una columna en la base de datos denominada "eliminado", la configuro en 1 y luego tengo el adaptador para actualizar la lista. Parece que no funciona.

Si utilizo la sentencia delete funciona. Se actualiza y todo está bien, pero quiero tener los elementos eliminados en la base de datos pero no mostrarlos (así que básicamente "ocultar" los elementos)

Si reviso la base de datos, la actualización en sí misma tuvo éxito en los cambios de columna y todo, así que supongo que es un problema de actualización porque el adaptador no vuelve a consultar la base de datos o algo en esa dirección.

Listview Loader:

public void fillData() {

    if(lw.getAdapter() == null){
        // Fields from the database (projection)
        // Must include the _id column for the adapter to work
        String[] from = new String[] { TodoTable.COLUMN_SUMMARY, TodoTable.COLUMN_ID};
        String where = TodoTable.COLUMN_DELETED + " = ?";


        Cursor cursor = getContentResolver().query(TodoContentProvider.CONTENT_URI,from,where,new String[] {"0"},null);
        // Fields on the UI to which we map
        int[] to = new int[] { R.id.label };

        adapter = new SimpleCursorAdapter(this, R.layout.todo_row, cursor, from,
                to, 0);
        Log.v("Count",Integer.toString(cursor.getCount()));
        lw.setAdapter(adapter);
    }
    else
        adapter.notifyDataSetChanged();
    }

Eliminar functon

@Override
public boolean onContextItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case DELETE_ID:
            /* Code for actual delete
            AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item
                    .getMenuInfo();
            Uri uri = Uri.parse(TodoContentProvider.CONTENT_URI + "/"
                    + info.id);
            getContentResolver().delete(uri, null, null);
            fillData();
            */

            /* Code for update and hide */
            AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item
                    .getMenuInfo();
            Uri uri = Uri.parse(TodoContentProvider.CONTENT_URI + "/"
                    + info.id);
            ContentValues values = new ContentValues();
            values.put(TodoTable.COLUMN_DIRTY, 1);
            values.put(TodoTable.COLUMN_DELETED, 1);
            getContentResolver().update(uri,values,null,null);
            fillData();
            return true;
    }
    return super.onContextItemSelected(item);
}

si pongo un registro en la función de consulta de ContentProvider, en realidad no se activa.

¿Alguna sugerencia sobre cómo resolver esto?

Si yo usoadapter.swapCursor(cursor); funciona bien, simplemente no sé si esta es la forma correcta de hacerlo.

public void fillData() {

    // Fields from the database (projection)
    // Must include the _id column for the adapter to work
    String[] from = new String[] { TodoTable.COLUMN_SUMMARY, TodoTable.COLUMN_ID};
    String where = TodoTable.COLUMN_DELETED + " = ?";

    Cursor cursor = getContentResolver().query(TodoContentProvider.CONTENT_URI,from,where,new String[] {"0"},null);

    // Fields on the UI to which we map
    int[] to = new int[] { R.id.label };

    if(lw.getAdapter() == null){
        adapter = new SimpleCursorAdapter(this, R.layout.todo_row, cursor, from,
                to, 0);
        Log.v("Count",Integer.toString(cursor.getCount()));
        lw.setAdapter(adapter);
    }
    else
    {
        adapter.swapCursor(cursor);
    }
}

Ty por la ayuda

Respuestas a la pregunta(2)

Su respuesta a la pregunta