Tutorial CRUD Android + SQLite (VI): Editar registros desde formulario

Posted by in Programación Android

Siguiendo con el Tutorial Android + SQLite en la entrada anterior vimos cómo borrar registros de la base de datos SQLite desde un formulario, en esta nos centraremos en cómo editar registros en una base de datos SQLite desde un formulario.

Para ello, prepararemos el formulario para el modo edición y con una nueva opción de menú permitiremos pasar del modo visualización al modo edición.

Para ello veremos los siguientes conceptos:

  • Cambiar el modo del formulario con una opción de menú
  • Editar registros en la base de datos SQLite
  • Devolver un resultado desde el formulario a la actividad principal
  • Refrescar el ListView con los datos del registro editado


 

1: Método Update en HipotecaDbAdapter

Añadimos el método update en la clase HipotecaDbAdapter.java. Este método recibe un parámetro ContentValues con los valores del registro y extrae el identificador para el update en SQLite.

...
...
/**
 * Modificar el registro
 */
public long update(ContentValues reg)
{
	long result = 0;
	
	if (db == null)
		abrir();
	
	if (reg.containsKey(C_COLUMNA_ID))
	{
		//
		// Obtenemos el id y lo borramos de los valores
		//
		long id = reg.getAsLong(C_COLUMNA_ID);
		
		reg.remove(C_COLUMNA_ID);
		
		//
		// Actualizamos el registro con el identificador que hemos extraido 
		//
		result = db.update(C_TABLA, reg, "_id=" + id, null); 
	}
	return result;
}
...
...

 

2: Formulario en Modo Edición

Incluimos la constante que identifica el modo edición en la clase principal Hipoteca.java. Por el momento solamente vamos a hacer uso de ella desde el formulario, pero la dejamos en la clase principal para tener organizados todos los identificadores de acciones en una misma clase y también porque en la próxima entrada haremos uso de ella … pero eso ya llegará.

...
...
public static final String C_MODO  = "modo" ;
public static final int C_VISUALIZAR = 551 ;
public static final int C_CREAR = 552 ;
public static final int C_EDITAR = 553 ;
...
...

Registramos los mensajes que utilizaremos en el modo edición en el recurso strings.xml

<string name="hipoteca_editar_titulo">Editar Hipoteca</string>
<string name="hipoteca_editar_confirmacion">Hipoteca modificada</string>

Ahora modificamos el método establecerModo de la clase formulario HipotecaFormulario.java para añadir la opción Editar. Esta opción modificará el título y activará la edición de los elementos del formulario.

...
...
private void establecerModo(int m)
{
	this.modo = m ;
	
	if (modo == Hipoteca.C_VISUALIZAR)
	{
		this.setTitle(nombre.getText().toString());
		this.setEdicion(false);
	}
	else if (modo == Hipoteca.C_CREAR)
	{
		this.setTitle(R.string.hipoteca_crear_titulo);
		this.setEdicion(true);
	}
	else if (modo == Hipoteca.C_EDITAR)
	{
		this.setTitle(R.string.hipoteca_editar_titulo);
		this.setEdicion(true);
	}
}
...
...

 

3: Guardar el registro modificado

Para guardar los datos modificados durante el modo edición, ampliamos el método guardar para realizar la operación de update del DbAdapter.

...
...
private void guardar()
{
	//
	// Obtenemos los datos del formulario
	// 
	ContentValues reg = new ContentValues();
	
	//
	// Si estamos en modo edición añadimos el identificador del registro que se utilizará en el update
	//
	if (modo == Hipoteca.C_EDITAR)
		reg.put(HipotecaDbAdapter.C_COLUMNA_ID, id);
	
	reg.put(HipotecaDbAdapter.C_COLUMNA_NOMBRE, nombre.getText().toString());
	reg.put(HipotecaDbAdapter.C_COLUMNA_CONDICIONES, condiciones.getText().toString());
	reg.put(HipotecaDbAdapter.C_COLUMNA_CONTACTO, contacto.getText().toString());
	reg.put(HipotecaDbAdapter.C_COLUMNA_TELEFONO, telefono.getText().toString());
	reg.put(HipotecaDbAdapter.C_COLUMNA_EMAIL, email.getText().toString());
	reg.put(HipotecaDbAdapter.C_COLUMNA_OBSERVACIONES, observaciones.getText().toString());
	
	if (modo == Hipoteca.C_CREAR)
	{
		dbAdapter.insert(reg);
		Toast.makeText(HipotecaFormulario.this, R.string.hipoteca_crear_confirmacion, Toast.LENGTH_SHORT).show();
	}
	else if (modo == Hipoteca.C_EDITAR)
	{
		Toast.makeText(HipotecaFormulario.this, R.string.hipoteca_editar_confirmacion, Toast.LENGTH_SHORT).show();
		dbAdapter.update(reg);
	}
	
	//
	// Devolvemos el control
	//
	setResult(RESULT_OK);
	finish();
}
...
...

 

4: Activar el modo edición

Ya tenemos listo el modo edición del formulario, ahora vamos a añadir una opción al menú hipoteca_formulario_ver.xml para activar el modo edición.

<menu xmlns:android="http://schemas.android.com/apk/res/android" >
    
    <item
        android:id="@+id/menu_eliminar"
		android:title="@string/menu_eliminar" />
    <item 
        android:id="@+id/menu_editar"
        android:title="@string/menu_editar" />

</menu>

Incorporamos el nuevo texto utilizado al recurso strings.xml

<string name="menu_editar">Editar</string>

Definimos la acción a realizar cuando se seleccione la nueva opción de menú en el método onMenuItemSelected de la clase HipotecaFormulario.java que consistirá en llamar al método establecerModo con la opción Hipoteca.C_EDITAR.

...
...
@Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {
	
	switch (item.getItemId())
	{
		case R.id.menu_eliminar:
			borrar(id);
			return true;
			
		case R.id.menu_cancelar:
			cancelar();
			return true;
			
		case R.id.menu_guardar:
			guardar();
			return true;
			
		case R.id.menu_editar:
			establecerModo(Hipoteca.C_EDITAR);
			return true;
	}
	
	return super.onMenuItemSelected(featureId, item);
}
...
...

 

5: Ejecución de la aplicación

¡Ya está todo listo! Ahora basta con ejecutar la aplicación en el emulador.

android_sqlite_formulario_editar_1

 
Si tienes alguna pregunta o algo que aportar no lo dudes … ¡tienes los comentarios a tu disposición!