Editar y eliminar elementos en Realm

Editar y eliminar elementos en Realm

Realizaremos una aplicación Android que permita editar y eliminar elementos en Realm. Utilizaremos para esto un menú colocado en el Action Bar de la app, así como un menú contextual relacionado con un ListView que muestra los elementos guardados en una base de datos Realm.

Creación de un directorio de recursos

Vamos a crear un directorio de recursos para colocar allí nuestros menús. 

Da clic derecho en res

Selecciona New->Android Resource Directory

En resource type elige menu, en directory name deja la opción: menu

Notaremos que se creó una carpeta llamada menu dentro de res

Creación de los menús

Creación del menú que irá en el Action Bar

Da clic derecho sobre la carpeta menu (creada anteriormente)

Selecciona New->menu resource file

En File name escribe: menu_main_activity

El código de éste archivo será el siguiente:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/delete_all"
        android:title="Borrar todo"
        />
</menu>

Vamos a crear a continuación el menú contextual que aparecerá cuando demos una pulsación larga sobre un elemento del ListView.

Da clic derecho sobre la carpeta menu

Selecciona New->menu resource file

En File name escribe:  context_menu_main_activity

El código de éste archivo será:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/edit_board"
        android:title="Editar" />
    <item
        android:id="@+id/delete_board"
        android:title="Borrar" />
</menu>

Vamos ahora a MainActivity.java

(Consideramos que ya has realizado la parte previa de éste proyecto, que puedes consultar aquí)

Menú de opciones que irá en el Action Bar

En MainActivity vamos a escribir el código necesario para mostrar el menú que tiene la opción de Borrar todo.

Escribe el siguiente código:

@Override
    public boolean onCreateOptionsMenu(Menu menu){
        getMenuInflater().inflate(R.menu.menu_main_activity,menu);
        return super.onCreateOptionsMenu(menu);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()){
            case R.id.delete_all:
                deleteAll();
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }

Menú contextual relacionado con el ListView

Haremos lo mismo pero ahora con el menú contextual que tiene las opciones de Editar y Borrar.

@Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
        AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo;
        menu.setHeaderTitle(boards.get(info.position).getTitle());
        getMenuInflater().inflate(R.menu.context_menu_main_activity,menu);
    }

    @Override
    public boolean onContextItemSelected(MenuItem item) {
        AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
        switch (item.getItemId()){
            case R.id.delete_board:
                deleteBoard(boards.get(info.position));
                return true;
            case R.id.edit_board:
                showAlertForEditingboard("Editar tablero", "Cambia el nombre del tablero", boards.get(info.position));
                return true;
            default:
                return super.onContextItemSelected(item);
        }
    }

Editar y eliminar elementos en Realm

Como puedes observar los menús que hemos creado invocan las siguientes operaciones: Borrar todo, Borrar un elemento y Editar un elemento.

Vamos a crear los métodos que realizan éstas acciones.

Eliminar elementos en Realm

Agrega los siguientes métodos a nuestro código de MainActivity

    private void deleteAll() {
        realm.beginTransaction();
        realm.deleteAll();
        realm.commitTransaction();
    }

    private void deleteBoard(Board board) {
        realm.beginTransaction();
        board.deleteFromRealm();
        realm.commitTransaction();
    }

Editar elementos en Realm

Para el proceso de editar un registro, primero creamos un método que abra un cuadro de diálogo donde el usuario puede editar el nombre de un “tablero”. Si el nuevo nombre cumple los requisitos, se invoca la instrucción para editar elementos en Realm.

Cuadro diálogo para editar el nombre de un tablero

public void showAlertForEditingboard(String title, String message, final Board board){
        AlertDialog.Builder builder = new AlertDialog.Builder(this);        
        if (title != null) builder.setTitle(title);
        if (message != null) builder.setMessage(message);        
        View viewInflated = LayoutInflater.from(this).inflate(R.layout.dialog_create_board, null);        
        builder.setView(viewInflated);
        final EditText input = (EditText) viewInflated.findViewById(R.id.editTextNewBoard);
        input.setText(board.getTitle());        
        builder.setPositiveButton("Guardar", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {        
                String boardName = input.getText().toString().trim();
                if (boardName.length()== 0)
                    Toast.makeText(getApplicationContext(), "Debe escribir un nombre", Toast.LENGTH_LONG).show();
                else if (boardName.equals(board.getTitle())){
                    Toast.makeText(getApplicationContext(), "El nombre es el mismo", Toast.LENGTH_LONG).show();
                }
                else{
                    editBoard(boardName, board);
                }
            }
        });        
        AlertDialog dialog = builder.create();
        dialog.show();
    }

Método que edita elementos en realm

Agregamos además el siguiente método:

    private void editBoard(String newName, Board board) {
        realm.beginTransaction();
        board.setTitle(newName);
        realm.copyToRealmOrUpdate(board);
        realm.commitTransaction();
    }

Ya solo nos queda registrar el menu contextual para que sea utilizado por el ListView, por lo que agregamos la siguiente línea a nuestro método onCreate:

registerForContextMenu(listview);

La apariencia de los menús es similar a lo que vemos a continuación:

Menú en el Action Bar

Menú en el Action Bar

Menú para Editar y eliminar elementos en Realm

Menú para Editar y eliminar elementos en Realm

Si deseas ver el resultado final, da clic aquí.

 

 

¿Qué te pareció este artículo?
  • Poco informativo 
  • No era lo que buscaba 
  • Regular 
  • Interesante 
  • Excelente 
(Visto 1.734 veces)
Facebooktwitterlinkedinmail

Tu comentario

opiniones

Leave a Reply

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *







+ 77 = 87