Tutorial CRUD Android + SQLite (VII): Menú contextual en ListView

Posted by in Programación Android

Siguiendo con el Tutorial Android + SQLite en la entrada anterior cómo editar registros en una base de datos SQLite desde un formulario, en esta incorporaremos el menú contextual en la actividad princial para seleccionar las acciones Visualizar, Editar y Borrar manteniendo la pulsación sobre un elemento de la lista.


 

1: Método borrar

Añadimos la acción C_ELIMINAR y el método borrar en la clase Hipoteca.java.

...
...
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 ;
public static final int C_ELIMINAR = 554 ;
...
...
...
private void borrar(final long id)
{
	//
	// Borramos el registro y refrescamos la lista
	//
	AlertDialog.Builder dialogEliminar = new AlertDialog.Builder(this);
	
	dialogEliminar.setIcon(android.R.drawable.ic_dialog_alert);
	dialogEliminar.setTitle(getResources().getString(R.string.hipoteca_eliminar_titulo));
	dialogEliminar.setMessage(getResources().getString(R.string.hipoteca_eliminar_mensaje));
	dialogEliminar.setCancelable(false);
	
	dialogEliminar.setPositiveButton(getResources().getString(android.R.string.ok), new DialogInterface.OnClickListener() {

		public void onClick(DialogInterface dialog, int boton) {
			dbAdapter.delete(id);
			Toast.makeText(Hipoteca.this, R.string.hipoteca_eliminar_confirmacion, Toast.LENGTH_SHORT).show();
			consultar();				
		}
	});
	
	dialogEliminar.setNegativeButton(android.R.string.no, null);
	
	dialogEliminar.show();
}
...
...

 

2: Menú contextual

Indicamos en el método onCreate la vista sobre la que se mostrará el menú contextual.

...
...
@Override
protected void onCreate(Bundle savedInstanceState) {
	super.onCreate(savedInstanceState);
	setContentView(R.layout.activity_hipoteca);
	
	lista = (ListView) findViewById(android.R.id.list);
	
	dbAdapter = new HipotecaDbAdapter(this);
	dbAdapter.abrir();
	
	consultar();
	
	registerForContextMenu(this.getListView());
}
...
...

 

El menú contextual podríamos crearlo como un recurso tal y como lo hemos hecho con los menús anteriores, no obstante, en este caso lo haremos por código.

...
...
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
	super.onCreateContextMenu(menu, v, menuInfo);
	
	menu.setHeaderTitle(cursor.getString(cursor.getColumnIndex(HipotecaDbAdapter.C_COLUMNA_NOMBRE)));
	menu.add(Menu.NONE, C_VISUALIZAR, Menu.NONE, R.string.menu_visualizar);
	menu.add(Menu.NONE, C_EDITAR, Menu.NONE, R.string.menu_editar);
	menu.add(Menu.NONE, C_ELIMINAR, Menu.NONE, R.string.menu_eliminar);
}
...
...

 

Incorporamos el nuevo texto utilizado al recurso strings.xml

<string name="menu_visualizar">Ver</string>

 

3: Acciones del menú contextual

Ahora debemos controlar las opciones seleccionadas del menú contextual. Para ello definiremos el método onContextItemSelected.

...
...
@Override
public boolean onContextItemSelected(MenuItem item) {
	
	AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
	Intent i;
	
	switch(item.getItemId())
	{
    	case C_ELIMINAR:
    		borrar(info.id);
    		return true;
    	
    	case C_VISUALIZAR:
    		visualizar(info.id);
			return true;
			
    	case C_EDITAR:
    		i = new Intent(Hipoteca.this, HipotecaFormulario.class);
    		i.putExtra(C_MODO, C_EDITAR);
    		i.putExtra(HipotecaDbAdapter.C_COLUMNA_ID, info.id);
			
    		startActivityForResult(i, C_EDITAR);
			return true;
    }
    return super.onContextItemSelected(item);
}
...
...

 

 

4: Ejecución de la aplicación

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

android_sqlite_menu_contextual_1

 

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