2010-11-01 8 views
8

Estoy intentando adaptar mi aplicación de un modelo de confirmación a un modelo de deshacer. Para aquellos de ustedes que no saben, aquí es donde pueden eliminar algo con un clic, pero si fue un error, pueden deshacerlo con la misma facilidad, en lugar de interrumpir al usuario cada vez que quiere hacer algo. pregunte a los molestos "¿Estás seguro de que quieres ...?" pregunta a través del diálogo.¿Cómo implementar deshacer un solo paso para los cambios en SQLite DB?

Mi aplicación está respaldada por la base de datos SQLite de Android y quiero poder deshacer un conjunto limitado de operaciones de eliminación y actualización. Además, solo necesito poder deshacer un cambio secuencial y la información no tiene que quedarse por mucho tiempo.

Todo lo que leo en deshacer/rehacer dice que use un modelo de comando para almacenar los datos. Mi pregunta es ¿cómo puedo almacenar los cambios de la base de datos de una manera ligera y restaurable?

+0

Supongo que desea que los cambios sean visibles por otras consultas, incluso cuando todavía se pueden deshacer? –

+0

@ Space_C0wb0y Los cambios deben guardarse y no son volátiles para que otras consultas puedan leerlos, pero necesito poder deshacer por completo la última transacción. – CodeFusionMobile

Respuesta

3

La idea del patrón de comando es que cada comando sepa cómo se puede deshacer. Por ejemplo, un AddPersonCommand agregaría un nuevo registro a la tabla Persons en su base de datos. Para deshacer este comando, debería eliminar esa persona nuevamente.

Según el tipo de aplicación y la complejidad de la base de datos, puede simplemente escribir los cambios en la base de datos como lo haría normalmente. Siempre conserva los últimos objetos de comando X (X es la cantidad de acciones que se pueden deshacer) y, si es necesario, puede invocar su undo -metodo.

1

También puede usar la biblioteca RestorableSQLiteDatabase que es un contenedor de SQLiteDatabase de android y genera automáticamente la restauración de consultas SQL para deshacer los cambios utilizando un nombre de etiqueta.

Cuestiones relacionadas